15. 3Sum
Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
时间复杂度:O(n^2)
空间复杂度:O(1)
先固定第一个值,剩下的逻辑和双指针一样
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
int length = nums.length;
if(length < 3)
return new ArrayList<>();
Arrays.sort(nums);
List<List<Integer>> resultList = new ArrayList<>();
for(int i = 0;i < length - 2;i++){
//先固定第一个值,如果目前指向值 = 上一个值,结果一定会重复
if(i > 0 && nums[i] == nums[i - 1]){
continue;
}
int curSum = -nums[i];
//固定一个值后,下面的逻辑和Two Sum的方法相同
int start = i + 1;
int end = length - 1;
while(start < end){
int tempSum = nums[start] + nums[end];
if(tempSum == curSum){
resultList.add(Arrays.asList(nums[i],nums[start],nums[end]));
start++;
end--;
//避免出现重复结果
while(start < end && nums[start] == nums[start - 1]){
start++;
}
while(start < end && nums[end] == nums[end + 1]){
end--;
}
}else if(tempSum < curSum){
start++;
}else{
end--;
}
}
}
return resultList;
}
}