18. 4Sum

来源:互联网 发布:p2p网络投资理财 编辑:程序博客网 时间:2024/05/01 00:11

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

分析:同3Sum一样的思路,多加了一层循环。

AC代码:

vector<vector<int> > fourSum(vector<int>& nums, int target){    vector<vector<int> > ret;    if(nums.size() < 4) return ret;    sort(nums.begin(), nums.end());    for(int i = 0; i < nums.size() - 3; ++i ){        if(i == 0 || nums[i] != nums[i - 1]){            int three_tar = target - nums[i];            for(int j = i + 1; j < nums.size() - 2; ++ j){                if(j == i + 1 || nums[j] != nums[j - 1]) {                    int two_tar = three_tar - nums[j];                    for(int p = j + 1, q = nums.size() - 1; p < q;){                        if(nums[p] + nums[q] == two_tar){                            if(p != j + 1 && nums[p] == nums[p - 1]){                                p ++;                                q --;                            }else{                                vector<int> qua;                                qua.push_back(nums[i]);                                qua.push_back(nums[j]);                                qua.push_back(nums[p]);                                qua.push_back(nums[q]);                                ret.push_back(qua);                                p ++;                                q --;                            }                        }else if(nums[p] + nums[q] < two_tar){                            p ++;                        }else{                            q --;                        }                    }                }            }        }    }    return ret;}
0 0