zoukankan      html  css  js  c++  java
  • 4Sum

    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]
    ]
    

    Subscribe to see which companies asked 

    class Solution{
    public:
        vector<vector<int>> fourSum(vector<int> & nums,int target){
            vector<vector<int>> res;
            if(nums.size()<4)
                return res;
    
            sort(nums.begin(),nums.end());
            unordered_map<int,vector<pair<int,int>>> cache;
            for(size_t i =0 ;i< nums.size();i++){
                for (size_t j = i+ 1;j<nums.size();j++){
                    cache[nums[i]+nums[j]].push_back(pair<int,int>{i,j});
                }
            }
    
            for(size_t i=0;i<nums.size();i++){
                for (size_t j = i+1;j<nums.size();j++){
                    int key = target - nums[i] - nums[j];
                    if(cache.find(key) == cache.end()){
                        continue;
                    }
    
                    vector<pair<int,int>> vec = cache[key];
                    for(size_t k = 0;k < vec.size();k++){
                        if(vec[k].first <= j)
                            continue;
                        res.push_back({nums[vec[k].first],nums[vec[k].second],nums[i],nums[j]});
                    }
                }
            }
            sort(res.begin(),res.end());
             res.erase(unique(res.begin(),res.end()),res.end());
            return res;
        }
    };
  • 相关阅读:
    版本控制之GitHub亲手实验总结
    Java的HashMap是如何实现的?
    Junit
    由swap引发的关于按值传递和引用传递的思考与总结
    C++了解free和delete
    GitHub使用教程
    Oracle下SQL学习笔记
    Flappy Bird
    尾递归与Continuation(转载)
    十步完全理解SQL(转载)
  • 原文地址:https://www.cnblogs.com/wxquare/p/5921986.html
Copyright © 2011-2022 走看看