Leetcode:15. 3Sum

问题描述:Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

其实就是给定一个数组,没有按顺序排列,找到三个数的和等于0,且这三个数的不重复。也就是没有顺序差异。

PS:并不是不能[-1, -1, 2],而是[-1, -1, 2]是和[2, -1, -1]只能出现一次。

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
         sort(nums.begin(), nums.end());
        vector<vector<int>> result;

        int len = nums.size();      
        for (int current = 0; current < len - 2&&nums[current]<=0;current++)
        {
            int front = current + 1, back = len - 1;
            while (front < back)
            {
                if (nums[current] + nums[front] + nums[back] < 0)
                    front++;
                else if (nums[current] + nums[front] + nums[back] > 0)
                    back--;
                else
                {
                    vector<int> v;
                        v.push_back(nums[current]);
                        v.push_back(nums[front]);
                        v.push_back(nums[back]);
                        result.push_back(v);
                        v.clear();
                    do {
                        front++;
                    } while (front < back&&nums[front - 1] == nums[front]);
                    do {
                        back--;
                    } while (front < back&&nums[back + 1] == nums[back]);
                }
            }                    
            while (current < len - 2 && nums[current + 1] == nums[current])
                current++;
        }                                  
        return result;
    }
};

O(∩_∩)O哈哈~

猜你喜欢

转载自blog.csdn.net/felaim/article/details/80290373