您的位置:首页 > 游戏 > 手游 > 武汉百度竞价_软件免费下载_百度网站链接_网页设计个人网站

武汉百度竞价_软件免费下载_百度网站链接_网页设计个人网站

2025/3/11 23:52:54 来源:https://blog.csdn.net/2402_83910930/article/details/146153018  浏览:    关键词:武汉百度竞价_软件免费下载_百度网站链接_网页设计个人网站
武汉百度竞价_软件免费下载_百度网站链接_网页设计个人网站

题目

思路

固定一个数c,然后遍历前面的数使其和为-c
转化问题为双指针求和为target=-nums[c]
把三数之和的问题转化为两数之和

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> ret;//创建一个二维数组用于返回if (nums.size() < 3) return ret;   //数组元素小于3直接返回空数组sort(nums.begin(), nums.end());//先排序int left = 0, c = nums.size() - 1, right = c - 1;      //固定c,遍历前面的数,使其和为-cwhile (c >= 2){int target = -nums[c];//特别特别注意!!!这里一定要更新left和right,不然会有遗漏的解left = 0, right = c - 1;while (left < right){if (nums[left] + nums[right] < target)left++;else if (nums[left] + nums[right] > target)right--;else{ret.push_back({ nums[left],nums[right],nums[c] });left++; right--;while (left < right && nums[left] == nums[left - 1]) left++;//遇到相同的数直接跳过,避免重复解while (left < right && nums[right] == nums[right + 1]) right--;}}c--;while (c >= 2 && nums[c] == nums[c + 1])c--;//c遇到相同的数也要跳过!}return ret;}
};

版权声明:

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

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