网站首页 > 技术文章 正文
题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
我的思路: 三数之和,这个题是我们之前做的《两数之和》的进阶版本,难度更大。这题用暴力破解肯定是时间超时的,时间复杂度为O(n3),同时我们还要注意题目的要求,要找出不重复的三元组,这要求更是增加了题目的难度。那么,我们的思考一下用其他的方法。 借鉴一下《两数之和》双指针是一个可以用到的技巧。 那么如何处理重复呢? 在这里想了很久,借鉴了大表哥的思路,先把数组排序,能起到一个很好的作用。 比如第一层for循环我们排序后的数值是 1,1,2,3 那么这两个1,我们其实可以跳过一个,因为1如果找到三元组,那么第二个1也会重复找到一样的,所以我们就可以直接跳过。
总结上述: 1.双指针 2:数组先排序,重复数值可以跳过。
代码如下:
public static List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
if (nums == null || nums.length < 1) {
return list;
}
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
int n = nums[i];
if (n > 0) {
break;
}
//去重
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
int start = i + 1;
int end = nums.length - 1;
while (start < end) {
int sum = n + nums[start] + nums[end];
if (sum > 0) {
end--;
} else if (sum < 0) {
start++;
} else {
List<Integer> l = new ArrayList<>();
l.add(n);
l.add(nums[start]);
l.add(nums[end]);
list.add(l);
//排好序后,进行组合去重
while (start < end && nums[start] == nums[start + 1]) start++;
while (start < end && nums[end] == nums[end - 1]) end--;
//比较下一位
start++;
end--;
}
}
}
return list;
}
这个题目对于我来说还是很有难度的,参考了各位大表哥的思路之后,才能写出题解。努力思考,继续加油!
如有错误,请各位大佬指出,谢谢!
猜你喜欢
- 2025-07-21 Python3学习第一课(第1节:基本语法)
- 2025-07-21 c语言、c++、JAVA、Python这四种编程语言应该怎么选?
- 2025-07-21 中小学生学习编程选择C++还是Python
- 2025-07-21 新手学python还是c?(学python好不好)
- 2025-07-21 运动控制卡,越来越简单了(运动控制卡作用)
- 2025-07-21 树莓派Pico快速上手教程之MicroPython和C使用说明
- 2025-07-21 Java、C语言、C++、Python等编程该选哪一个
- 2025-07-21 c,c++,python,java都有什么区别
- 2025-07-21 从初学者的角度看Python和C的异同
- 282℃Python短文,Python中的嵌套条件语句(六)
- 279℃python笔记:for循环嵌套。end=""的作用,图形打印
- 277℃PythonNet:实现Python与.Net代码相互调用!
- 273℃Python实现字符串小写转大写并写入文件
- 272℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 132℃原来2025是完美的平方年,一起探索六种平方的算吧
- 117℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 111℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)