Dictionary<int, int> ব্যবহার করে লিস্টে প্রতিটি সংখ্যার ফ্রিকোয়েন্সি গণনা করুন, তারপর কাউন্ট > ১ হলে ডুপ্লিকেট হিসেবে প্রিন্ট করুন।
এলগরিদম
- খালি ডিকশনারি তৈরি করুন।
- লিস্ট লুপ করুন: কি থাকলে ++, নাইলে ১।
- ডিকশনারি ইটারেট করে কাউন্ট > ১ প্রিন্ট করুন।
সম্পূর্ণ উদাহরণ
using System;
using System.Collections.Generic;
class PrintDuplicatesDemo
{
public static void Main()
{
int[] arr = { 3, 6, 3, 8, 9, 2, 2 };
var freq = new Dictionary<int, int>();
foreach (var n in arr)
{
if (freq.ContainsKey(n)) freq[n]++;
else freq[n] = 1;
}
Console.WriteLine("সব এলিমেন্টের ফ্রিকোয়েন্সি:");
foreach (var kvp in freq)
Console.WriteLine($"{kvp.Key} occurred {kvp.Value} time{(kvp.Value > 1 ? "s" : "")}");
Console.WriteLine("\nশুধু ডুপ্লিকেট (কাউন্ট > ১):");
foreach (var kvp in freq.Where(k => k.Value > 1))
Console.WriteLine($"{kvp.Key} ({kvp.Value} বার)");
}
}
আউটপুট
সব এলিমেন্টের ফ্রিকোয়েন্সি:
3 occurred 2 times
6 occurred 1 times
8 occurred 1 times
9 occurred 1 times
2 occurred 2 times
শুধু ডুপ্লিকেট (কাউন্ট > ১):
3 (2 বার)
2 (2 বার)
LINQ বিকল্প
var duplicates = arr
.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g => g.Key);
foreach (var d in duplicates) Console.WriteLine(d);
স্পেস-অপ্টিমাইজড: HashSet দুটি ব্যবহার করে
var seen = new HashSet<int>();
var duplicates = new HashSet<int>();
foreach (int n in arr)
{
if (!seen.Add(n)) // Add false ফেরত দিলে = ইতিমধ্যে আছে
duplicates.Add(n);
}
foreach (var d in duplicates) Console.WriteLine(d);
এই পদ্ধতিতে কাউন্ট স্টোর হয় না, শুধু ডুপ্লিকেট আছে কিনা জানা যায়।