সহজ পদ্ধতি হল যে আমরা তিনটি নেস্টেড লুপ তৈরি করতে পারি এবং একে একে পরীক্ষা করতে পারি যে তিনটি উপাদানের যোগফল শূন্য বা না। যদি তিনটি উপাদানের যোগফল শূন্য হয় তবে উপাদানগুলি মুদ্রণ করুন।
সময়ের জটিলতা − O(n 3 )
মহাকাশের জটিলতা − O(1)
আমরা অ্যারের প্রতিটি মান সঞ্চয় করার জন্য একটি ক্রমবিহীন সেট ডেটা স্ট্রাকচার ব্যবহার করতে পারি। সেট O(1) সময়ে একটি উপাদান অনুসন্ধানের সুবিধা প্রদান করে। সুতরাং, অ্যারের প্রতিটি জোড়ার জন্য, আমরা তাদের যোগফলের ঋণাত্মক সন্ধান করব যা সেটটিতে বিদ্যমান থাকতে পারে। যদি এমন একটি উপাদান পাওয়া যায় তবে আমরা ট্রিপলেটটি প্রিন্ট করতে পারি যা হবে পূর্ণসংখ্যার জোড়া এবং তাদের যোগফলের ঋণাত্মক মান।
সময়ের জটিলতা − O(n 2 )
মহাকাশের জটিলতা − 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]]