如何使用 C# 查找接近目标的四元组?
双指针模式类似于四元组求和为零。我们可以采用类似的方法遍历数组,一次取一个数字。在每个步骤中,我们将保存四元组和目标数之间的差,并在每个步骤将其与迄今为止的最小目标差进行比较,以便在最后,我们可以返回最接近总和的三元组。
时间复杂度
对数组进行排序需要 O(N* logN)。总体而言,fourSumClosest() 将需要 O(N * logN + N^3),这在渐进意义上等效于 O(N^3)。
空间复杂度
上述算法的空间复杂度为 O(N),这是排序所需的。
示例
public class Arrays{ public int FourSumClosestToTarget(int[] nums, int target){ if (nums == null || nums.Length == 0){ return -1; } int[] newNums = nums.OrderBy(x => x).ToArray(); int initialSum = newNums[0] + newNums[1] + newNums[2] + newNums[3]; for (int i = 0; i < nums.Length; i++){ for (int j = i; j < nums.Length; j++){ int left = j + 1; int right = nums.Length - 1; while (left < right){ int nearestSum = newNums[i] + newNums[j] + newNums[left] + newNums[right]; if (nearestSum < initialSum){ initialSum = nearestSum; } if (nearestSum == target){ return nearestSum; } else if (nearestSum < target){ left++; } else{ right--; } } } } return initialSum; } } static void Main(string[] args){ Arrays s = new Arrays(); int[] nums = { 1,0,-1,0,-2,2 }; var ss = FourSumClosestToTarget(nums,0); Console.WriteLine(ss); }
输出
0
广告