LeetCode-18-4 Sum

算法描述:

Given an array nums of n integers and an integer target, are there elements abc, and d in nums 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.

Example:

Given array nums = [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]
]

解题思路:与3Sum 思路一致。

vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int> > results;
        if(nums.size() < 4) return results;
        sort(nums.begin(),nums.end());
        for(int i=0; i < nums.size()-3; i++){
            if(i > 0 && nums[i] == nums[i-1]) continue;
            for(int j=i+1; j < nums.size()-2; j++){
                if(j > i+1 && nums[j]==nums[j-1]) continue;
                int low = j+1;
                int high = nums.size()-1;
                while(low < high){
                    int sum = nums[i]+nums[j]+nums[low]+nums[high];
                    if(sum==target){
                        vector<int> temp = {nums[i],nums[j],nums[low],nums[high]};
                        results.push_back(temp);
                        while(low < high && nums[low]==nums[low+1]) low++;
                        while(low < high && nums[high]==nums[high-1]) high--;
                        low++;
                        high--;
                    } else if(sum < target)
                        low++;
                    else 
                        high--;
                }
            }
        }
        return results;
    }

 

posted on 2019-01-27 20:43  无名路人甲  阅读(127)  评论(0编辑  收藏  举报