দুটি নেস্টেড লুপ বা HashSet ব্যবহার করে অ্যারেতে দুটি সংখ্যার যোগফল নির্দিষ্ট টার্গেটের সমান কিনা চেক করা যায়।
ব্রুট-ফোর্স (O(n²)) — সহজ কিন্তু ধীর
int[] arr = { 7, 4, 6, 2 };
int target = 8;
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < arr.Length; j++)
{
if (i != j && arr[i] + arr[j] == target)
Console.WriteLine($"Pair: {arr[i]} + {arr[j]} = {target}");
}
}
HashSet ব্যবহার করে (O(n)) — দ্রুত
var seen = new HashSet<int>();
foreach (int n in arr)
{
int complement = target - n;
if (seen.Contains(complement))
Console.WriteLine($"Pair: {complement} + {n} = {target}");
seen.Add(n);
}
সম্পূর্ণ উদাহরণ (দুই পদ্ধতিই)
using System;
using System.Collections.Generic;
class TwoSumDemo
{
public static void Main()
{
int[] arr = { 7, 4, 6, 2 };
int target = 8;
Console.WriteLine($"টার্গেট: {target}");
Console.WriteLine("ব্রুট-ফোর্স:");
for (int i = 0; i < arr.Length; i++)
for (int j = i + 1; j < arr.Length; j++) // i+1 দিয়ে ডুপ্লিকেট এড়ানো
if (arr[i] + arr[j] == target)
Console.WriteLine($" {arr[i]} + {arr[j]} = {target}");
Console.WriteLine("\nHashSet (O(n)):");
var seen = new HashSet<int>();
foreach (int n in arr)
{
int comp = target - n;
if (seen.Contains(comp))
Console.WriteLine($" {comp} + {n} = {target}");
seen.Add(n);
}
}
}
আউটপুট
টার্গেট: 8
ব্রুট-ফোর্স:
6 + 2 = 8
2 + 6 = 8
HashSet (O(n)):
6 + 2 = 8
টিপস
- ব্রুট-ফোর্সে
j = i + 1দিয়ে ডুপ্লিকেট পেয়ার এড়াতে পারেন। - HashSet পদ্ধতিতে প্রতিটি পেয়ার একবারই প্রিন্ট হয়।
- সর্টেড অ্যারে থাকলে টু-পয়েন্টার (O(n log n) সর্ট + O(n) স্ক্যান) ব্যবহার করুন।