当前位置:网站首页>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;
}
};
边栏推荐
猜你喜欢
随机推荐
有哪些好用的IT资产管理平台?
为什么手动启动GBase 8c数据库中GTM节点
[A summary of the sorting and use of activation functions in deep learning]
162_Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv_2.0
GMapping principle analysis/easy to understand
大型连锁百货运维审计用什么软件好?有哪些功能?
半导体制造业回流美国?宏碁创始人施振荣:违反垂直分工大趋势
VMware 虚拟机如何连接网络「建议收藏」
GDB调试CoreDump文件
使用Jetty服务器和Axis2框架技术发布Webservice接口
优思学院|2022年获美质协ASQ和ILSSI奖项的《精益六西格玛的十条戒律》
varchar2和varchar2(char)_datetime数据类型
连亏四个月,赚不回电费,预制菜经销商恐成“韭菜”?
位级运算之计算整数位级表示奇偶性
一文详解什么是软件部署
15 years of software architect experience summary: In the ML field, 5 pits that beginners have stepped on
Nanoprobes Ni-NTA-Nanogold——用于 His 标签标记和检测
将移位距离和假设外推到非二值化问题
CVPR 2022 | Predicting Skeletons from Human Meshes, True Physiological Skeletons!
华云数据张华林:投身数字蓝海 绘就云上强国