4Sum

来源:互联网 发布:简单的php项目 编辑:程序博客网 时间:2024/04/28 21:43

和2Sum一样样的,只能降低一个量级的复杂度到O(n^3)。

这点代码里还杂糅了一些其他的东西,比如如何跳过重复的元素,当答案里不要重复元素的时候,这个方法很有用。

class Solution {public:    vector<vector<int> > fourSum(vector<int> &num, int target) {        vector<vector<int>> res;        if (num.size() == 0)            return res;        sort(num.begin(), num.end());        vector<int> t;        for (int i = 0; i < num.size(); ++i) {            for (int j = i + 1; j < num.size(); ++j) {                vector<vector<int>> t = twoSum(num, j + 1, target - num[i] - num[j]);                if (t.size() != 0) {                    for (int k = 0; k < t.size(); ++k) {                        vector<int> tmp;                        tmp.push_back(num[i]);                        tmp.push_back(num[j]);                        tmp.push_back(t[k][0]);                        tmp.push_back(t[k][1]);                        res.push_back(tmp);                    }                }                while (j < num.size() - 1 && num[j + 1] == num[j])                    j++;            }            while (i < num.size() - 1 && num[i + 1] == num[i])                i++;        }        return res;    }    vector<vector<int>> twoSum(vector<int> &num, int start, int target) {        vector<vector<int>> res;        int i = start, j = num.size() - 1;        while (i < j) {            if (num[i] + num[j] == target) {                vector<int> t;                t.push_back(num[i]);                t.push_back(num[j]);                res.push_back(t);                while (i < j && num[i + 1] == num[i])i++;while (i < j && num[j - 1] == num[j])j--;i++;j--;            }            else if (num[i] + num[j] > target)                j--;            else                i++;        }        return res;    }};

http://oj.leetcode.com/problems/4sum/

0 0
原创粉丝点击