【双指针】LeetCode 15. 三数之和
题目链接
思路
可以借鉴 【双指针】LeetCode 167. 两数之和 II - 输入有序数组 的思路,将 nums[i]
作为 target
,不断移动 j
和 k
来达到目标。
去重的方法:通过判断 nums[j] == nums[j + 1]
和 nums[k] == nums[k - 1]
来去重。
代码
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> result = new ArrayList<>();
for(int i = 0; i < nums.length; i++){
if(nums[i] > 0){
break;
}
if(i > 0 && nums[i] == nums[i - 1]){
continue;
}
// start from index i + 1, because (nums[1], nums[2], num[3]) == (num[2], num[1], num[3])
int j = i + 1;
int k = nums.length - 1;
while(j < k){
int sum = nums[i] + nums[j] + nums[k];
if(sum == 0){
result.add(Arrays.asList(nums[i], nums[j], nums[k]));
// deduplication
while(j < k && nums[j] == nums[j + 1]){
j++;
}
while(j < k && nums[k] == nums[k - 1]){
k--;
}
j++;
k--;
}
if(sum > 0){
k--;
}else if(sum < 0){
j++;
}
}
}
return result;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律