力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

// 1. 排序+双指针
// 2. 固定一个值nums[i] 然后去剩下的位置去找 两数之和符合nums[j]+nums[k]是否等于-nums[i]
// 3. 细节问题:由于题目中是不可以包含重复的三元组的,因此我们需要对我们所选的三个数进行去重
- class Solution
- {
- public:
- vector
int>> threeSum(vector<int>& nums) - {
- // 1. 排序+双指针
- // 2. 固定一个值nums[i] 然后去剩下的位置去找 两数之和符合nums[j]+nums[k]是否等于-nums[i]
- // 3. 细节问题:由于题目中是不可以包含重复的三元组的,因此我们需要对我们所选的三个数进行去重
-
- int n=nums.size();
-
- sort(nums.begin(),nums.end());
- vector
int>> vv; - vector<int> v;
- for(int i=0;i
- {
- int target=-nums[i];
- // 由于数组中的数据是升序的
- // 那么最小的数都是正数,那么后面的数都是正数
- // 因此就不可能会有三个数相加等于0
- if(nums[i]>0) break; // 当该值不符合情况直接跳出for循环
- int left=i+1,right=n-1;
- while(left
- {
- int sum=nums[left]+nums[right];
- if(sum
- {
- left++;
- }
- else if(sum>target)
- {
- right--;
- }
-
- // 当走到该位置的时候,那么这三个数就是符合条件的
- else
- {
- v.clear();
- v.push_back(nums[i]); v.push_back(nums[left]); v.push_back(nums[right]);
- vv.push_back(v);
- // vv.push_back({nums[i],nums[left],nums[right]});
- left++;right--;
- // 对两个指针进行去重
- while(left
-1]) left++; - while(left
1]) right--; - }
-
- }
- // 对当前固定值进行去重
- i++;
- while(i
-1]) i++; - }
- return vv;
- }
- };
-
相关阅读:
Visual Studio C# 多环境配置 Web.config
js常用方法JQ选择器
上交所实时行情文件汇总
优化算法 - 凸性
把请求头信息添加到请求报文中,然后发送请求到淘宝,显示回复信息
Android Media Framework(三)OpenMAX API阅读与分析
智能指针与定制删除器
5G与UWB定位技术融合的四种方式
解决Vue3中echarts无法缩放的问题
JAVA计算机毕业设计宠物寄养管理系统Mybatis+系统+数据库+调试部署
-
原文地址:https://blog.csdn.net/m0_57249790/article/details/132720382