题目
代码
class Solution {public: vector> threeSum(vector & nums) { //先固定住第一个数字,然后后面两个数字为 i+1和 nums.size()-1开始往中间缩小,并且要考虑数字重复的问题,时间复杂度为O(n²) vector > res; sort(nums.begin(),nums.end()); for(int i=0;i target) { back--; }else { vector temp; temp.push_back(nums[i]); temp.push_back(nums[front]); temp.push_back(nums[back]); res.push_back(temp); //移动到和当前的front指向的值不重复的地方 while(front
思路
先将数组进行排序,比如[1,6,5,5,3]进行排序后为[1,3,5,5,6],此时我们可以将问题化解为求两个数字的和等于第一个数字乘以-1.
假设第一个数字的取值为nums[i],那么另外两个数字的取值从这个数组的nums[i+1]和nums.size()开始往中间取值,直到low<high不满足。