অ্যারেতে ডুপ্লিকেট উপাদান খুঁজে বের করার সবচেয়ে কার্যকর পদ্ধতি হলো Dictionary<TKey, TValue> ব্যবহার করা। এখানে কি হিসেবে অ্যারের উপাদান এবং ভ্যালু হিসেবে তার ফ্রিকোয়েন্সি (ঘনত্ব) সংরক্ষণ করা হয়।
অ্যালগরিদম
- একটি খালি ডিকশনারি তৈরি করুন:
Dictionary<int, int> - অ্যারের প্রতিটি উপাদান için লুপ চালান
- যদি কি ইতিমধ্যে থাকে → কাউন্ট বাড়ান
- যদি কি না থাকে → নতুন এন্ট্রি তৈরি করুন (কাউন্ট = 1)
- শেষে ডিকশনারি থেকে কাউন্ট > 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 GroupBy | O(n) | O(n) | পঠনীয়, ডিক্লেরেটিভ |
| Sort + Adjacent Check | O(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) স্পেস)