4Sum

来源:互联网 发布:java项目添加log日志 编辑:程序博客网 时间:2024/05/16 04:32

跟求3sum差不多


class Solution {public:     vector<vector<int> > fourSum(vector<int> &num, int target) {        vector<vector<int> > result;        sort(num.begin(), num.end());        for(int i = num.size() - 1; i > 2; i--) {            if(i == num.size() - 1 || num[i] != num[i + 1]) {                vector<vector<int> > tmp = threeSum(num, i - 1, target - num[i]);                for(int k = 0; k < tmp.size(); k++) {                    tmp[k].push_back(num[i]);                    result.push_back(tmp[k]);                }            }        }        return result;    }private:       vector<vector<int> > threeSum(vector<int> &num, int end, int target) {        int pre = -1;        vector<vector<int> > result;        for(int i = 0; i <= end; i++) {            int temp = num[i];            if(pre != -1 && num[pre] == num[i]) {                continue;            }            pre = i;            int low = i + 1, high = end;            int val = target - num[i];            while(low < high) {                int t = num[low] + num[high];                if(t == val) {                    vector<int> tmp;                    tmp.push_back(num[i]);                    tmp.push_back(num[low]);                    tmp.push_back(num[high]);                    result.push_back(tmp);                    low++;                    high--;                    while(low < high && num[low] == num[low - 1]) {                        low++;                    }                    while(low < high && num[high] == num[high + 1]) {                        high--;                    }                } else if(t < val) {                    low++;                } else {                    high--;                }            }        }        return result;    }};


0 0
原创粉丝点击