2
0
0
LeetCode15-三数之和

文章摘要
|

乍一看三个数三指针好复杂,其实这题本质也是双指针,我们可以固定一个数,然后去动其余两个数
需要注意拿到一组三元组后,要先将左右指针移动一位,再进行去重操作,虽说颠倒顺序不影响结果,但是逻辑有点混乱.
其次就是因为我们用了Array.sort(nums)排序,所以对于sum于target不同的大小对比情况,有着对应要移动的边界left/right。
class Solution {
public List<List<Integer>> threeS um(int[] nums) {
List<List<Integer>> list = new List<>();
Array.sort(nums);
for(int i = 0;i < nums.length; i++){
if(i > 0 && nums[i] == nums[i-1]) continue;
int left = i+1;
int right = nums.length-1;
int target = -nums[i];
while(left < right){
int sum = nums[left] + nums[right];
if(sum = target){
list.add(Arrays.asList(nums[i], nums[left], nums[right]));
left++;
right--;
while(left < right && nums[left]==nums[left+1]) left++;
while(left < right && nums[right]==nums[right-1]) right--;
}else if(sum < taget){
left++;
}else{
right++;
}
}
}
return list;
}
}