欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 力扣算法-三数之和

力扣算法-三数之和

2025/2/24 10:27:09 来源:https://blog.csdn.net/qq_45080494/article/details/144715677  浏览:    关键词:力扣算法-三数之和

三数之和在这里插入图片描述思路:先把数组排序。把i下标的数据定为target,还是利用双向指针,遍历i+1到n的结果有没有相等的,有的话还要把left指针往后,right的指针往前,然后再判断数据有没有重复,有的话继续往下走,直到left>right循环结束装下所有不重复的结果,注意判断不重复的条件当前的值不等于前一个。然后还有就是如果当前三个数值都比0大,直接结束循环,因为后面的都比0大;如果当前加两个最大的比0小,直接continue,因为这个一趟不会找到等于0的数了。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(),nums.end());vector<vector<int>>ans;int target,left,right;for(int i = 0;i<nums.size()-2;i++){left=i+1;right=nums.size()-1;target = -nums[i];//新的和前一个的一样的就不用再比了if(i>0&&target+nums[i-1]==0){continue;}//如果最小三个都比0大,后面不用比了if((nums[i]+nums[i+1]+nums[i+2])>0)break;//如果当前和最大的两个比小于0,则i直接下一个if((nums[i]+nums[right]+nums[right-1])<0)continue;while(left<right){if(target==(nums[left]+nums[right])){vector<int>temp;temp.push_back(-target);temp.push_back(nums[left]);temp.push_back(nums[right]);ans.push_back(temp);left++;right--;//去掉重复的情况while(left<right&&nums[left]==nums[left-1])left++;while(left<right&&nums[right]==nums[right+1])right--;}if(target>nums[left]+nums[right]){left++;}if(target<nums[left]+nums[right]){right--;}}}return ans;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词