[Leetcode]_15 3Sum

来源:互联网 发布:物联网数据卡 编辑:程序博客网 时间:2024/06/05 15:40
/** *  Index: 15 *  Title: 3Sum *  Author: ltree98 **/


暴力肯定TLE,不用多想。

先对所有数据进行排序,
然后从第一个数开始,取一个数,计算这个数后面是否有两个数加这个数等于0。
最关键就是:

  • 排序(此方法的基点)
  • 确定一组答案后过滤前后同值的数(过滤同样的答案, 且不影响其他不同的答案)


class Solution {public:    vector<vector<int>> threeSum(vector<int>& nums) {        if(nums.size() < 3)            return {};        std::sort(nums.begin(), nums.end());        vector<vector<int>> ans;        for(int i = 0; i < nums.size(); )   {            int l = i+1, h = nums.size()-1, s = -nums[i];            while(l < h)    {                if(nums[l] + nums[h] == s)  {                    ans.push_back({nums[i], nums[l], nums[h]});                    l++, h--;                               while(l < h && nums[l] == nums[l-1])                        l++;                    while(l < h && nums[h] == nums[h+1])                        h--;                }                else if(nums[l] + nums[h] < s)                    l++;                else                    h--;            }            i++;            while(i < nums.size() && nums[i] == nums[i-1])                i++;        }        return ans;    }};
0 0
原创粉丝点击