Leetcode Week12

来源:互联网 发布:lol比赛视频软件 编辑:程序博客网 时间:2024/05/13 07:09

求4sum,原理同3sum

Given an array S of n integers, are there elements abc, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.

Note: The solution set must not contain duplicate quadruplets.

For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.A solution set is:[  [-1,  0, 0, 1],  [-2, -1, 1, 2],  [-2,  0, 0, 2]]
class Solution {public:    vector<vector<int>>* v;    vector<vector<int>> fourSum(vector<int>& num, int target) {        v = new vector<vector<int>>();          if(num.size()<4) return *v;                sort(num.begin(),num.end());                for(int i=0;i<num.size()-3;i++)        {            if(i>0&&num[i]==num[i-1]) continue;            for(int j=i+1;j<num.size()-2;j++)            {                if(j>i+1&&num[j]==num[j-1]) continue;                for(int k=j+1;k<num.size()-1;k++)                {                    if(k>j+1&&num[k]==num[k-1]) continue;                    int left = k+1;                    int right = num.size()-1;                    while(left <= right)                    {                        int mid = left + (right-left)/2;                        if(num[i]+num[j]+num[k]+num[mid] == target)                        {                            vector<int> tmp;                            tmp.push_back(num[i]);                            tmp.push_back(num[j]);                            tmp.push_back(num[k]);                            tmp.push_back(num[mid]);                            v->push_back(tmp);                            break;                        }else if(num[i] + num[j] + num[k] + num[mid] > target)                        {                            right = mid-1;                        }else{                            left = mid+1;                        }                    }                }            }        }        return *v;    }};


0 0
原创粉丝点击