সহজ পদ্ধতি হলো তিনটি নেস্টেড লুপ তৈরি করে একে একে চেক করা যে তিনটি এলিমেন্টের যোগফল শূন্য কিনা। যদি তিনটি এলিমেন্টের যোগফল শূন্য হয়, তবে এলিমেন্টগুলো প্রিন্ট করুন।
টাইম কমপ্লেক্সিটি − O(n3)
স্পেস কমপ্লেক্সিটি − O(1)
আমরা আনঅর্ডার্ড সেট ডেটা স্ট্রাকচার ব্যবহার করতে পারি অ্যারের প্রতিটি ভ্যালু স্টোর করতে। সেট O(1) টাইমে এলিমেন্ট সার্চ করার সুবিধা দেয়। তাই অ্যারের প্রতিটি পেয়ারের জন্য, আমরা তাদের যোগফলের 네가েটিভ মান সেটে আছে কিনা চেক করব। যদি এমন এলিমেন্ট পাওয়া যায়, তবে আমরা ট্রিপলেট প্রিন্ট করতে পারি যা হবে ইন্টিজার পেয়ার এবং তাদের যোগফলের 네가েটিভ ভ্যালু।
টাইম কমপ্লেক্সিটি − O(n2)
স্পেস কমপ্লেক্সিটি − O(n)
উদাহরণ
public class Arrays{ public List<List<int>> ThreeSum(int[] nums){ List<List<int>> res = new List<List<int>>(); if (nums == null || nums.Length == 0){ return res; } var newnums = nums.OrderBy(x => x).ToArray(); for (int i = 0; i < newnums.Count(); i++){ int left = i + 1; int right = newnums.Count() - 1; while (left < right){ int sum = newnums[i] + newnums[left] + newnums[right]; if (sum == 0){ List<int> l = new List<int>(); l.Add(newnums[i]); l.Add(newnums[left]); l.Add(newnums[right]); res.Add(l); int leftValue = newnums[left]; while (left < newnums.Length && leftValue == newnums[left]){ left++; } int riightValue = newnums[right]; while (right > left && riightValue == newnums[right]){ right--; } } else if (sum < 0){ left++; } else{ right--; } } while (i + 1 < newnums.Length && newnums[i] == newnums[i + 1]){ i++; } } return res; } } static void Main(string[] args){ Arrays s = new Arrays(); int[] nums = { -1, 0, 1, 2, -1, -4 }; var ss = s.ThreeSum(nums); foreach (var item in ss){ foreach (var item1 in item){ Console.WriteLine(item1); } } }আউটপুট
[[-1,-1,2],[-1,,0,1]]