आसान तरीका यह है कि हम चार नेस्टेड लूप बना सकते हैं और एक-एक करके जांच सकते हैं कि सभी चार तत्वों का योग शून्य है या नहीं। यदि चार तत्वों का योग शून्य है तो प्रिंट तत्व।
समय की जटिलता - हे(n 4 )
अंतरिक्ष जटिलता -ओ(1)
हम सरणी के प्रत्येक मान को संग्रहीत करने के लिए एक अनियंत्रित सेट डेटा संरचना का उपयोग कर सकते हैं। सेट ओ (1) समय में किसी तत्व को खोजने का लाभ प्रदान करता है। इसलिए, सरणी में प्रत्येक जोड़ी के लिए, हम उनके योग के ऋणात्मक की तलाश करेंगे जो सेट में मौजूद हो सकते हैं। यदि ऐसा कोई तत्व पाया जाता है तो हम त्रिक को प्रिंट कर सकते हैं जो पूर्णांकों का युग्म और उनके योग का ऋणात्मक मान होगा।
समय की जटिलता - हे(n 3 )
अंतरिक्ष जटिलता -ओ(एन)
उदाहरण
public class Arrays{ public List<List<int>> FourSum(int[] nums){ List<List<int>> res = new List<List<int>>(); if (nums == null || nums.Length == 0){ return null; } int[] newNums = nums.OrderBy(x => x).ToArray(); for (int i = 0; i < newNums.Length; i++){ for (int j = i; j < newNums.Length; j++){ int left = j + 1; int right = newNums.Length - 1; while (left < right){ int sum = newNums[i] + newNums[j] + newNums[left] + newNums[right]; if (sum == 0){ List<int> sums = new List<int>(); sums.Add(newNums[i]); sums.Add(newNums[j]); sums.Add(newNums[left]); sums.Add(newNums[right]); res.Add(sums); int leftValue = newNums[left]; int rightValue = newNums[right]; while (left < nums.Length && leftValue == nums[left]){ left++; } while (right > left && right == nums[right]){ right--; } } else if (sum < 0){ left++; } else{ right--; } } while (j + 1 < nums.Length && nums[j] == nums[j + 1]){ j++; } } while (i + 1 < nums.Length && nums[i] == nums[i + 1]){ i++; } } return res; } } static void Main(string[] args){ Arrays s = new Arrays(); int[] nums = { 1,0,-1,0,-2,2 }; var ss = FourSum(nums); foreach (var item in ss){ foreach (var item1 in item){ Console.WriteLine(item1); } } }
आउटपुट
[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]