b_lc_四数之和(map记录另外两个数的位置 / 双指针+二分思想)

找出所有满足条件且不重复的四元组,即四元组中 a + b + c + d 的值与 target 相等

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& A, int m) {
        int n=A.size(); sort(A.begin(), A.end());
        set<vector<int>> ans;
        unordered_map<int, vector<pair<int, int>>> mp;

        for (int i=0; i<n-1; i++)
        for (int j=i+1; j<n; j++) {
            int s=A[i]+A[j], d=m-s;
            for (auto& v : mp[d]) {
                int p=v.first, q=v.second;
                if (q<i) ans.insert({A[i], A[j], A[p], A[q]});
            }
            mp[s].push_back({i,j});
        }
        vector<vector<int>> t; t.assign(ans.begin(), ans.end());
        return t;
    }
};
posted @ 2020-10-06 09:14  童年の波鞋  阅读(96)  评论(0编辑  收藏  举报