三数之和,双指针法,细节很多
Posted lau1997
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三数之和,双指针法,细节很多相关的知识,希望对你有一定的参考价值。
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
class Solution { public: vector<vector<int> > threeSum(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<vector<int> >res; int _size=nums.size(); if(_size<3||nums.front()>0||nums.back()<0) return res; int i,j,k; for(k=0;k<=_size-3;k++){ if(nums[k]>0) break; if(k>0&&nums[k]==nums[k-1]) continue; //跳过无意义移动 i=k+1;j=_size-1; while(i<j){ if(nums[i]+nums[j]+nums[k]>0) j--; else if(nums[i]+nums[j]+nums[k]<0) i++; else{ res.push_back({nums[i],nums[j],nums[k]}); while(i<j&&nums[i]==nums[i+1]) //跳过无意义移动 i++; while(i<j&&nums[j]==nums[j-1]) //同上 j--; i++; j--; //这里可以两边同时缩近,缩一边没啥用hahaha。 } } } return res; } };
以上是关于三数之和,双指针法,细节很多的主要内容,如果未能解决你的问题,请参考以下文章