leetcode_15_3Sum

欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢

3Sum

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:

  • Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
  • 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)

分析:

先排序,然后左右夹逼,注意跳过重复的数,时间复杂度O(n^2)

//方法:先排序,然后左右夹逼,注意跳过重复的数,时间复杂度O(n^2)
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(vector<int>::iterator i = nums.begin(); i < nums.end() - 2; i++)
        {
            if(i > nums.begin() && *i == *(i-1))
                continue;
            vector<int>::iterator j = i + 1;
            vector<int>::iterator k = nums.end() - 1;
            while(j < k)
            {
                if(*i + *j + *k < 0)
                {
                    j++;
                    while(*j == *(j-1) && j < k)
                        j++;
                }
                else if(*i + *j + *k > 0)
                {
                    k--;
                    while(*k == *(k+1) && j < k)
                        k--;
                }
                else
                {
                    result.push_back({*i, *j, *k});
                    j++;
                    k--;
                    while(*j == *(j-1) && *k == *(k+1) && j < k)
                        j++;
                }
            }
        }
        return result;
    }
};
时间: 2024-08-08 05:35:34

leetcode_15_3Sum的相关文章