3Sum

来源:互联网 发布:零基础如何学好c语言 编辑:程序博客网 时间:2024/06/01 08:06

Given an array S of n integers, are there elements a, b, c 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.

class Solution {public:    vector<vector<int>> threeSum(vector<int>& nums) {        vector< vector <int> > result;        if(nums.size() < 3)            return result;        sort(nums.begin(), nums.end());//从小到大排序        for(int index = 0; index < nums.size()-2; index++)        {            if(index == 0 || (index > 0 && nums[index] != nums[index-1])) // 去除重复的情况            {                int i = index + 1;                int j = nums.size() - 1;                while(i < j)//类似于快速排序的代码格式                {                    if(-nums[index] == (nums[i] + nums[j]))                    {                        vector<int> temp;                        temp.push_back(nums[index]);                        temp.push_back(nums[i]);                        temp.push_back(nums[j]);                        result.push_back(temp);                        while(i < j && nums[i] == nums[i+1]) i++;                        while(i < j && nums[j] == nums[j-1]) j--;                        i++,j--;                    }                    else if(i < j && -nums[index] < (nums[i] + nums[j]))                        j--;                    else if(i < j && -nums[index] > (nums[i] + nums[j]))                        i++;                }            }       }        return result;    }};
0 0
原创粉丝点击