作者:暴力的西红柿 | 来源:互联网 | 2023-07-09 10:13
前面我们已经给出过三数之和等于0的代码,不过改代码在LeetCode上面超出时间限制,所以说,不能完全说解出该题,今天我们给出优解,直接上代码:思路:先对数组进行排序,用for循环
前面我们已经给出过三数之和等于0的代码,不过改代码在LeetCode上面超出时间限制,所以说,不能完全说解出该题,今天我们给出优解,
直接上代码:
思路:先对数组进行排序,用for循环控制一个变量i,另外两个j和k分别指向结尾和当前i的下一个位置,进行查找。
public List> threeSum(int[] nums) {
Arrays.sort(nums);
List> lists = new ArrayList>();
if(nums.length > 2&& nums != null) {
for(int i = 0; i int j = i+1;
int k = nums.length - 1;
while(j = 0) {
if(nums[i] + nums[j] + nums[k] == 0) {
List list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[j]);
list.add(nums[k]);
lists.add(list);
j++;
k--;
while(j j++;
}
while(j k--;
}
}else if(nums[i] + nums[j] + nums[k] > 0) {
k--;
while(j k--;
}
}else {
j++;
while(j j++;
}
}
}
i++; //下标累加
while(i i++;
}
}
}
return lists;
}