LeetCode-18 4Sum

来源:互联网 发布:centos 安装mysql pdo 编辑:程序博客网 时间:2024/04/26 01:03

题目:给定一个数组a[n]和目标值target,找出所有相加等于target的四个值。值以升序排列

思路:类似3sum,只不过在外层多加了一个循环。每个循环都要判重

class Solution {public:    vector<vector<int> > fourSum(vector<int> &num, int target) {        vector<vector<int> > result;        int length=num.size();        sort(num.begin(),num.end());        for(int i=0;i<length;i++){            if(i>0&&num[i]==num[i-1]){                continue;            }            int temp_target=target-num[i];            for(int j=i+1;j<length;j++){                if(j>i+1&&num[j]==num[j-1])continue;                                int k ,t;                k=j+1;                t=length-1;                while(k<t){                    if(k>j+1&&num[k]==num[k-1]){                        k++;                        continue;                    }                    if(t<length-1&&num[t]==num[t+1]){                        t--;                        continue;                    }                                        int sum=num[j]+num[k]+num[t];                                        if(sum==temp_target){                        vector<int> a;                        a.push_back(num[i]);                        a.push_back(num[j]);                        a.push_back(num[k]);                        a.push_back(num[t]);                        result.push_back(a);                        k++;                    }                   else if(sum>temp_target)t--;                    else{                        k++;                    }                  }               }        }     return result;       }};


0 0