0

我有一个 twosum 的问题,它是给定一个 int 数组 num 和一个 int 目标,找出数组中有多少个唯一对,使得它们的总和等于目标。返回对数。

我的代码有时会在测试用例中得到错误的答案,例如 nums = [1,2,3,4], target = 5 我的代码只会返回 1 对。

这是我的代码

public int twoSum6(int[] nums, int target) {
    int pair = 0;
    ...
   Arrays.sort(nums);

   int left = 0;
   int right = nums.length - 1;

  while(left < right){
      if(nums[left] + nums[right] == target  ){
        pair++;
        left++;
        right--;
        while(left < right &&  nums[left] == nums[left + 1]  ){
          left++;
      }
       while(left < right &&  nums[right] == nums[right - 1]){
          right--;
      }
      }


      if(nums[left] + nums[right] < target){
          left++;
      }else{
          right--;
      }
  } return pair;

}

这是示例测试 输入:nums = [1, 1, 2, 45, 46, 46], target = 47 输出:2 解释:1 + 46 = 47 2 + 45 = 47

所以如果测试用例是 [1,2,3,4] 并且目标是 5,那么实际输出是 2 我的输出是 1,我认为我的逻辑有问题,但我不确定那在哪里

4

0 回答 0