3Sum

来源:互联网 发布:矩阵正规化 编辑:程序博客网 时间:2024/06/02 06:39

Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note: The solution set must not contain duplicate triplets.

For example, given array S = [-1, 0, 1, 2, -1, -4],A solution set is:[  [-1, 0, 1],  [-1, -1, 2]]

class Solution {public:    vector<vector<int>> threeSum(vector<int>& nums) {        sort(nums.begin(),nums.end());        vector<vector<int> >result;        map<int,int>M;        for(int i=0;i<nums.size();++i)        {            M.insert(make_pair(nums[i],i));        }        for(int i=0;i<nums.size();++i)        {            if(i>0&&nums[i-1]==nums[i])continue;            for(int j=i+1;j<nums.size();++j)            {                if(j>i+1&&nums[j]==nums[j-1])continue;                if(M.find(-nums[i]-nums[j])!=M.end())                {                    if(-nums[i]-nums[j]>nums[j]||-nums[i]-nums[j]==nums[j]&&j<nums.size()-1&&nums[j]==nums[j+1])                    {                        vector<int>v;                        v.push_back(nums[i]);                        v.push_back(nums[j]);                        v.push_back(-nums[i]-nums[j]);                        result.push_back(v);                    }                }                            }        }        return result;    }};


原创粉丝点击