LeetCode 18 四数之和

    科技2022-09-14  119

    题意

    分析

    当然写法有很多种了,我自己想了一个写法。就是a+b+c+d=t,可以变为: a+b=t-(c+d)=x 这个时候我们首先把a+b给存起来,然后枚举剩下两个数。看看存不存在,存在就符合。当然这里需要去重,搞个set去一下重。比较投机取巧。

    代码

    class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); map<int, vector<pair<int, int>>>mp; for (int i = 0; i < nums.size(); i++) { for (int j = i + 1; j < nums.size(); j++) { mp[nums[i] + nums[j]].push_back(make_pair(i, j)); } } set<vector<int>>s; for (int i = 0; i < nums.size(); i++) { for (int j = i + 1; j < nums.size(); j++) { int tem = nums[i] + nums[j]; tem = target - tem; if (mp.find(tem) == mp.end())continue; for (auto id : mp[tem]) { int idx = id.first; int idy = id.second; if (idx > idy)swap(idx, idy); if (idx == i||idx==j||idy==i|| idy == j)continue; vector<int>tem{ nums[i],nums[j],nums[idx],nums[idy]}; sort(tem.begin(), tem.end()); s.insert(tem); } } } vector<vector<int>>ans; for (auto t : s) { ans.push_back(t); } return ans; } };
    Processed: 0.014, SQL: 9