15. 3Sum

来源:互联网 发布:5g网络wifi什么意思 编辑:程序博客网 时间:2024/04/19 05:53
class Solution {public:    vector<vector<int>> threeSum(vector<int>& nums) {        sort(nums.begin(),nums.end());        vector<vector<int>> ret;        int n=nums.size();        if(n<3)            return ret;        int i,left,right;        for(i=0;i<n-2;i++)        {            left=i+1;            right=n-1;            if(nums[i]>0)                break;            int target=0-nums[i];            while(left<right)            {                if(nums[right]<0)                    break;                if(nums[left]+nums[right]==target)                {                    vector<int> temp;                    temp.push_back(nums[i]);                    temp.push_back(nums[left]);                    temp.push_back(nums[right]);                    ret.push_back(temp);                    while(left<right&&nums[left+1]==nums[left])                        left++;                    while(left<right&&nums[right-1]==nums[right])                        right--;                    left++;                    right--;                }                else if(nums[left]+nums[right]<target)                    left++;                else                    right--;            }            while(i<n-2&&nums[i+1]==nums[i])                i++;        }        return ret;    }};
1 0