如何使用 C# 找到接近目标的四元组?

csharpserver side programmingprogramming更新于 2025/4/18 9:52:17

双指针模式,类似于四元组和为零。我们可以采用类似的方法遍历数组,一次取一个数字。在每一步中,我们都会保存四元组和目标数字之间的差异,并在每一步中将其与迄今为止的最小目标差异进行比较,以便最终返回总和最接近的三元组。

时间复杂度

对数组进行排序将需要 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

相关文章