কম্পিউটার টিউটোরিয়াল

C#-এ অ্যারেতে ডুপ্লিকেট নম্বর চেক করা (Dictionary ব্যবহার করে)

অ্যারেতে ডুপ্লিকেট উপাদান খুঁজে বের করার সবচেয়ে কার্যকর পদ্ধতি হলো Dictionary<TKey, TValue> ব্যবহার করা। এখানে কি হিসেবে অ্যারের উপাদান এবং ভ্যালু হিসেবে তার ফ্রিকোয়েন্সি (ঘনত্ব) সংরক্ষণ করা হয়।

অ্যালগরিদম

  1. একটি খালি ডিকশনারি তৈরি করুন: Dictionary<int, int>
  2. অ্যারের প্রতিটি উপাদান için লুপ চালান
  3. যদি কি ইতিমধ্যে থাকে → কাউন্ট বাড়ান
  4. যদি কি না থাকে → নতুন এন্ট্রি তৈরি করুন (কাউন্ট = 1)
  5. শেষে ডিকশনারি থেকে কাউন্ট > 1 वाले উপাদানগুলো ফিল্টার করুন

সম্পূর্ণ উদাহরণ

using System;
using System.Collections.Generic;

namespace Demo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int[] arr = { 87, 55, 23, 87, 45, 23, 98 };
            
            var dict = new Dictionary<int, int>();
            
            // ফ্রিকোয়েন্সি গণনা
            foreach (var num in arr)
            {
                if (dict.ContainsKey(num))
                    dict[num]++;
                else
                    dict[num] = 1;
            }
            
            // ফলাফল প্রিন্ট
            Console.WriteLine("উপাদান\t\tঘনত্ব");
            Console.WriteLine("------------------");
            foreach (var kvp in dict)
            {
                Console.WriteLine($"{kvp.Key}\t\t{kvp.Value} বার");
            }
            
            // শুধু ডুপ্লিকেটগুলো দেখান
            Console.WriteLine("\nডুপ্লিকেট উপাদানগুলো:");
            foreach (var kvp in dict)
            {
                if (kvp.Value > 1)
                    Console.WriteLine($"{kvp.Key} ({kvp.Value} বার)");
            }
        }
    }
}

আউটপুট

উপাদান		ঘনত্ব
------------------
87		2 বার
55		1 বার
23		2 বার
45		1 বার
98		1 বার

ডুপ্লিকেট উপাদানগুলো:
87 (2 বার)
23 (2 বার)

আধুনিক C# পদ্ধতি (LINQ GroupBy)

using System.Linq;

var duplicates = arr
    .GroupBy(x => x)
    .Where(g => g.Count() > 1)
    .Select(g => new { Value = g.Key, Count = g.Count() });

foreach (var d in duplicates)
    Console.WriteLine($"{d.Value} ({d.Count} বার)");

শুধু ডুপ্লিকেট আছে কিনা চেক করা (Boolean)

bool hasDuplicates = arr.Length != arr.Distinct().Count();
// অথবা
bool hasDuplicates = arr.GroupBy(x => x).Any(g => g.Count() > 1);

পারফরম্যান্স তুলনা

পদ্ধতিটাইম কমপ্লেক্সিটিস্পেস কমপ্লেক্সিটিনোট
Dictionary (লুপ)O(n)O(n)সর্বোচ্চ ফ্লেক্সিবল
LINQ GroupByO(n)O(n)পঠনীয়, ডিক্লেরেটিভ
Sort + Adjacent CheckO(n log n)O(1)ইন-প্লেস, অর্ডার হারায়
HashSet (শুধু এক্সিস্টেন্স)O(n)O(n)সবচেয়ে দ্রুত বুলিয়ান চেকের জন্য

HashSet ব্যবহার করে শুধু এক্সিস্টেন্স চেক (সর্বোচ্চ দ্রুত)


var seen = new HashSet<int>();
bool hasDuplicate = false;

foreach (var num in arr)
{
    if (!seen.Add(num)) // Add রিটার্ন করে false যদি ইতিমধ্যে থাকে
    {
        hasDuplicate = true;
        break;
    }
}

Console.WriteLine(hasDuplicate ? "ডুপ্লিকেট পাওয়া গেল" : "ডুপ্লিকেট নেই");

সারসংক্ষেপ

  • ফ্রিকোয়েন্সি জানতে: Dictionary বা LINQ GroupBy
  • শুধু ডুপ্লিকেট আছে কিনা: HashSet (সর্বোচ্চ দ্রুত)
  • মেমরি সীমিত: Sort + Adjacent Check (O(1) স্পেস)
  1. মাইক্রোসফট ওয়ার্ড দিয়ে অনলাইনে ডুপ্লিকেট টেক্সট চেক করা

  2. Python-এ সংখ্যা বিজোড় নাকি জোড় চেক করা

  3. পাইথনে স্ট্রিং শুধু হোয়াইটস্পেস ক্যারেক্টার ধারণ করছে কিনা যাচাই করা

  4. পাইথনে স্ট্রিং শুধু নির্দিষ্ট ক্যারেক্টার ধারণ করছে কিনা যাচাই করা