18. 四数之和

pair头文件 #include <utility>
pair将一对值(T1和T2)组合成一个值,
这一对值可以具有不同的数据类型(T1和T2),
两个值可以分别用pair的两个公有函数first和second访问。

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>>result;
        unordered_map<int,vector<pair<int,int>>>cache;
        sort(nums.begin(),nums.end());
        for(int a=0;a<nums.size();a++)
        {
            for(int b=a+1;b<nums.size();b++)
            {
                cache[nums[a]+nums[b]].push_back(pair<int,int>(a,b));
            }
        }
        for(int c=0;c<nums.size();c++)
        {
            for(int d=c+1;d<nums.size();d++)
            {
                int sum=target-nums[c]-nums[d];
                if(cache.find(sum)==cache.end())continue;
                auto vec=cache[sum];
                for(int k=0;k<vec.size();k++)
                {
                    if(c<=vec[k].second)continue;
                    result.push_back({nums[vec[k].first],nums[vec[k].second],nums[c],nums[d]});
                }
            }
        }
        sort(result.begin(),result.end());
        result.erase(unique(result.begin(),result.end()),result.end());
        return result;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素...
    Mage阅读 936评论 0 0
  • 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,...
    LeeYunFeng阅读 4,278评论 0 48
  • 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,...
    闭门造折阅读 1,449评论 0 0
  • 一、题目原型: 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四...
    花果山松鼠阅读 5,577评论 0 0
  • 这是菡萏萏的第449篇 7:28-7:40用时12分钟字数425 我也不知道为什么,我习惯的模式一直都是欲拒还迎,...
    何不可阅读 1,352评论 0 1