class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
Arrays.sort(nums);
for(int i = 0; i < nums.length - 2; i++){
//如果第一个值大于0,后面first和second处肯定大于0
if(nums[i] > 0) break;
//移动固定的数字,直到移动到数值不等的那一个
if(i > 0 && nums[i - 1] == nums[i]) continue;
int first = i + 1, second = nums.length - 1;
while(first < second){
if(nums[i] + nums[first] + nums[second] == 0){
list.add(Arrays.asList(nums[i], nums[first], nums[second]));
int preFirst = nums[first], preSecond = nums[second];
second--;
first++;
//如果相等,双指针移动到下一个数值不等的组合
while(first < second && nums[first] == preFirst) first++;
while(first < second && nums[second] == preSecond) second--;
}
while(nums[i] + nums[first] + nums[second] > 0){
second--;
if(second <= first) break;
}
while(nums[i] + nums[first] + nums[second] < 0){
first++;
if(second <= first) break;
}
}
}
return list;
}
}
15. 三数之和
最新推荐文章于 2024-01-30 23:16:51 发布