gpt4 book ai didi

java - 3总和: avoid duplicates

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:39 25 4
gpt4 key购买 nike

问题:给定一个由 n 个整数组成的数组 S,S 中是否存在满足 a + b + c = 0 的元素 a、b、c?查找数组中总和为零的所有唯一三元组。

为了避免重复,我在 while 循环中使用了 if 子句,我想知道为什么这不起作用。谢谢!

public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
Arrays.sort(nums);

for (int i = 0; i<nums.length; i++){
if (i > 0 && nums[i] == nums[i-1]){
continue;
}
int target = -1*nums[i];
int start = i+1;
int end = nums.length-1;

while (start < end){

if (nums[start] == nums[start+1]){
start++;
}

if (nums[end] == nums[end--]){
end--;
}

if (nums[start]+nums[end] == target){
System.out.printf("found");
List<Integer> temp = new ArrayList<Integer>();
temp.add(nums[i]);
temp.add(nums[start]);
temp.add(nums[end]);
result.add(temp);
start++;
end--;
} else if (nums[start]+nums[end] < target) {
start++;
} else {
end--;
}
}
}
return result;

我正在 [-1,0,1] 上进行测试,我的代码返回了一个空列表。我尝试调试并打印了一些消息,似乎当i=1时,在while循环中,它首先进入

if (nums[start] == nums[start+1]){
start++;
}

但是当start=1时,nums[start]不等于nums[start+1]。这实在是太奇怪了。有人可以给我解释一下吗?

最佳答案

将代码中的字符串替换为

if (nums[end] == nums[end--]) {

 if (nums[end] == nums[end - 1]) {

关于java - 3总和: avoid duplicates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com