Dictionary<TKey, int> ব্যবহার করে অ্যারেতে প্রতিটি সংখ্যার ফ্রিকোয়েন্সি গণনা করা যায়। এরপর কাউন্ট > ১ হলে ডুপ্লিকেট।
এলগরিদম
- খালি
Dictionary<int, int>তৈরি করুন। - অ্যারে লুপ করুন: কি থাকলে কাউন্ট বাড়ান, নাই면 ১ সেট করুন।
- ডিকশনারি ইটারেট করে কাউন্ট > ১ موارد প্রিন্ট করুন।
সম্পূর্ণ উদাহরণ
using System;
using System.Collections.Generic;
class FindAllDuplicatesDemo
{
public static void Main()
{
int[] arr = { 24, 10, 56, 32, 10, 43, 88, 32 };
var freq = new Dictionary<int, int>();
foreach (var num in arr)
{
if (freq.ContainsKey(num))
freq[num]++;
else
freq[num] = 1;
}
Console.WriteLine("এলিমেন্ট\t\tআবৃত্তি");
foreach (var kvp in freq)
{
Console.WriteLine($"{kvp.Key}\t\t\t{kvp.Value} বার");
}
Console.WriteLine("\nশুধু ডুপ্লিকেট:");
foreach (var kvp in freq.Where(k => k.Value > 1))
Console.WriteLine($"{kvp.Key} ({kvp.Value} বার)");
}
}
আউটপুট
এলিমেন্ট আবৃত্তি
24 1 বার
10 2 বার
56 1 বার
32 2 বার
43 1 বার
88 1 বার
শুধু ডুপ্লিকেট:
10 (2 বার)
32 (2 বার)
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} times");
তুলনা
| পদ্ধতি | সময় | স্পেস | পঠনযোগ্যতা |
|---|---|---|---|
| Dictionary (লুপ) | O(n) | O(k) | মধ্যম |
| LINQ GroupBy | O(n) | O(k) | উচ্চ |