Leetcode P15 Java使用3指针解决
Ideas
首先我们要对数组进行排序,我们第一个指针就是我们for循环
for (int i = 0; i < n; i++) {
}
第二个指针就是i+1,第三个指针就是n-1
int l = i + 1;
int r = n-1;
接下来我们进行移动l和r指针
while (l < r){
......
}
如果nums[i] + nums[left] + nums[right] == 0 那么就是我们要的答案,但是我们进行去重复,所以我们用set对他们进行驱虫
if (nums[i] + nums[l] + nums[r] == 0){
List<Integer> tmp = new ArrayList<>();
tmp.add(nums[i]);
tmp.add(nums[l]);
tmp.add(nums[r]);
l++;
r--;
set.add(tmp);
}
如果nums[i] + nums[left] + nums[right] < 0 就说明我们的三数之和小了就l指针++,
如果nums[i] + nums[left] + nums[right] >0 就说明我们的三数之和大了,就r指针–;
else if (nums[i] + nums[l] + nums[r] < 0){
l++;
}else{
r--;
}
code
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Set<List<Integer>> set = new HashSet<>();
Arrays.sort(nums);
int n = nums.length;
for (int i = 0; i < n; i++) {
int l = i + 1;
int r = n-1;
while (l < r){
if (nums[i] + nums[l] + nums[r] == 0){
List<Integer> tmp = new ArrayList<>();
tmp.add(nums[i]);
tmp.add(nums[l]);
tmp.add(nums[r]);
l++;
r--;
set.add(tmp);
}else if (nums[i] + nums[l] + nums[r] < 0){
l++;
}else{
r--;
}
}
}
List<List<Integer>> res = new ArrayList<>();
for (List<Integer> list : set) {
res.add(list);
}
return res;
}
}