Leetcode 3Sum

来源:互联网 发布:富士康网络重复报名 编辑:程序博客网 时间:2024/06/08 15:03

类似于2Sum做法,复杂度是O(n^2),难点在于如何去重三元组。

每次遇到符合的三元组,push_back进vector以后,还要继续往下扫,还有没有符合的,但是往下扫的时候记得跳过相同的元素。

附上K-Sum:求和问题总结的链接http://tech-wonderland.net/blog/summary-of-ksum-problems.html

class Solution {public:    vector<vector<int> > threeSum(vector<int> &num) {        sort(num.begin(), num.end());        vector<vector<int> > ans;        vector<int> v;        for(int i = 0; i < num.size() && num[i] <= 0; i++){            if(i >= 0 && num[i] == num[i-1]){                continue;            }            int p = i+1, q = num.size()-1, cur = -num[i];            while(p < q){                if(p == i || num[p] + num[q] < cur){                    p++;                }                else if(q == i || num[p] + num[q] > cur){                    q--;                }                else if(num[p] + num[q] == cur){                    int n1 = num[i], n2 = num[p], n3 = num[q];                    if(n1 > n2){                        swap(n1, n2);                    }                    v.push_back(n1);                    v.push_back(n2);                    v.push_back(n3);                    ans.push_back(v);                    v.clear();                    while(p < q && num[p+1] == num[p]){                        p++;                    }                    while(q > p && num[q-1] == num[q]){                        q--;                    }                    p++;                }            }        }        return ans;    }};

0 0
原创粉丝点击