当前位置:网站首页>LeetCode15:三数之和
LeetCode15:三数之和
2022-08-03 14:05:00 【Hugh.L】
题目
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = []
输出:[]
示例 3:
输入:nums = [0]
输出:[]
提示:
0 <= nums.length <= 3000
-105 <= nums[i] <= 105
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析
对于本题,评论区和题解区讨论热度都蛮高,看了很多例子后,应该也算是理解了题意,在此,再用自己的语言介绍一下思路。
思路可以简单概括为:排序+双指针+降重(减少复杂度)。思路的三个要点中,前两者都比较好理解和实现,主要是:
先将数组排序,数组有序后,先确定一个起始位置(默认第一位),再来一左一右两个指针,分别指向第一位和最末一位,计算三者之和,比较其与0的大小关系,如果比0大,左指针右移(减少和);比0小,右指针左移(增大和)。反复进行,直到找到三者之和恰好为0的组合。
至于降重,个人感觉是最需要细致考虑的一点,大佬考虑的可能更细。我在此介绍我理解的两点:
1,起始位置如果大于0,该种情况及其之后不用再考虑(毕竟数组有序递增后,最小的数大于0,肯定无法找出三个数之和等于0)
2,重复元素可以选择跳过(即后面的“起始位置”如果和前面的数相同,可以跳过)
实现
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> result;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++){
if(nums[i]>0){
return result;
}
if(i>0&& nums[i]==nums[i-1]){
continue;
}
int left=i+1;
int right=nums.size()-1;
while(right>left){
if(nums[i]+nums[left]+nums[right]>0){
right--;
}else if(nums[i]+nums[left]+nums[right]<0){
left++;
}else{
result.push_back(vector<int>{nums[i],nums[left],nums[right]});
while(right>left&&nums[right]==nums[right-1])right--;
while(right>left&&nums[left]==nums[left+1])left++;
right--;
left++;
}
}
}
return result;
}
};边栏推荐
- 爬虫——代理搭建、爬取视频网站、爬取新闻、BeautifulSoup4介绍、bs4 遍历文档树、bs4搜索文档树、bs4使用选择器
- 0代码4步体验物联网设备上云
- 设计思维 | 详看设计工作坊Workshop的11个关键技巧
- 162_Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv_2.0
- CVPR 2022 | 从人体网格预测骨架,是真正的生理学骨架!
- Lecture 2 Software Life Cycle
- 你把 vite打包 玩明白
- node项目开发踩坑(一)
- 硬件业务收入下滑,为了赚钱,苹果暧昧对待流氓软件和增加广告了
- 张乐:研发效能的黄金三角及需求与敏捷协作领域的实践|直播回顾
猜你喜欢
随机推荐
“杀猪盘”宰向环球影城
PCL 点云按时间进行分段
参数量仅0.5B,谷歌代码补全新方法将内部生产效率提升6%
美国拟对华禁售128层以上NAND Flash制造设备
游戏版号“地下交易”,一个版号能卖上千万?
c语言结构体知识总结
The difference between servlet and jsp _ the difference between servlet and class
硬件业务收入下滑,为了赚钱,苹果暧昧对待流氓软件和增加广告了
UE4 解决C盘缓存问题
js \n\r 换行失败 :【white-space: pre-line;】${} Template Literals
升级农企业务运营建设,智慧供应链管理平台打造“共赢生态链”
servlet与jsp区别_servlet和class的区别
数据科学家 Agnis Liukis :在ML领域,初学者踩过的5个坑
HCIP Day 16 Notes (SVI, Spanning Tree Protocol)
线程的状态
APT组织最喜欢的工具 Cobalt Strike (CS) 实战
162_Power Query is a custom function for quickly merging tables in a folder TableXlsxCsv_2.0
驻冰岛使馆提醒旅冰中国公民务必加强安全防护
网络通信的过程
“芯片法案”通过后,美光承诺在美国扩产









