我有一个 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,我认为我的逻辑有问题,但我不确定那在哪里