class Solution {
public List<List<Integer>> threeSum(int[] nums) {
// 特判 空和小于3
if(nums == null || nums.length < 3) return new ArrayList();
// 创建哈希set
List<List<Integer>> res = new ArrayList<>();
// 排序
Arrays.sort(nums);
// O(n^2的复杂度)
for(int i = 0; i <nums.length - 2; i++){ // 首先是这里 固定值i 的范围 不能取重复的
if(i > 0 && nums[i] == nums[i-1]) continue;
int l = i+1, r = nums.length - 1; // 然后是这里 左边界 i + 1 ,一开始弄成了 1 这不是搞笑,
得始终再 固定值 i 得右边。
while(l < r){
if(nums[l]+nums[r]+nums[i] == 0){
res.add(Arrays.asList(nums[i],nums[l],nums[r]));
while (nums[l] == nums[++l]&&l < r && nums[r] == nums[--r]);
}else if(nums[l]+nums[r]+nums[i] > 0){
r--;
}else {
l++;
}
}
}
return res; // O(n)
}
}
leetcode15——三数之和
最新推荐文章于 2024-06-15 09:23:13 发布