leetcode_015 3sum

来源:互联网 发布:快速启动 软件 ash 编辑:程序博客网 时间:2024/05/22 13:59

首先想到的就是3次for循环,从头找到尾,但是time limite exceeded。

考虑优化一下,可以先排序,然后从头开始,找到其相反数

class Solution {public:    vector<vector<int>> threeSum(vector<int>& nums)    {        if (nums.size() < 3)            return {};        sort(nums.begin(), nums.end());        vector<vector<int>> result;        int k = 0;        while (k < nums.size() && nums[k] <= 0)        {            int i = k + 1;            int j = nums.size() - 1;            while (i < j)            {                int sum = nums[i] + nums[j];                if (sum < -nums[k])                {                    i++;                    while (i < j && nums[i] == nums[i-1]) i++;                 }                else if (sum > -nums[k])                {                    j--;                    while (i < j && nums[j] == nums[j+1]) j--;                }                else                {                    result.push_back({nums[k], nums[i], nums[j]});                    i++;                    while (i < j && nums[i] == nums[i-1]) i++;                    j--;                    while (i < j && nums[j] == nums[j+1]) j--;                }            }            k++;            while (k < i && nums[k] == nums[k-1]) k++;        }        return result;    }};

这是别人写的代码。

0 0
原创粉丝点击