3Sum

C++ STL sort原理与用法:

//待补充...

vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> result;
        sort(nums.begin(),nums.end());
        
        for(int i=0;i<nums.size();i++)
        {
            int begin=i+1;
            int end=nums.size()-1;
            while(begin<end)
            {
                int sum=nums[i]+nums[begin]+nums[end];
                if(sum==0)
                {
                    vector<int> triple(3);
                    triple[0]=nums[i];
                    triple[1]=nums[begin];
                    triple[2]=nums[end];
                    result.push_back(triple);
                    //为了防止返回重复的结果
                    while(begin<end&&nums[begin]==triple[1])
                        begin++;
                    while(begin<end&&nums[end]==triple[2])
                        end--;
                }
                else if(sum>0)
                    end--;
                else
                    begin++;
            }
            //重复的元素不必再重新求解,节省时间,不然会timeout
            while(nums[i+1]==nums[i]&&i<nums.size())
                i++;
        }
        
        return result;
        
    }

**一定要注意边界条件的限制

posted on 2016-05-05 19:02  summerkiki  阅读(113)  评论(0编辑  收藏  举报