leetcode面试题16.24-在无序数组中所有发现和为sum的数对

题目:设计一个算法发现一个数组中和为指定值的所有数对。数组是无序的且值可能重复。

分析:

有一种方式是排序+双指针。

另一种是先用map统计,再在map中查找target-num。这里可以使用unordered_map(也就是哈希),时间复杂度是O(n).

    vector<vector<int>> pairSums(vector<int>& nums, int target) {
        vector<vector<int>>res;
        unordered_map<int, int>mp;
        for(int num : nums)  
            mp[num]++;
        for(int num : nums)
        {
            if(mp[num] && mp[target-num])
            {
                if(2*num == target && mp[num] < 2)  continue; // 特殊情况
                res.push_back(vector<int>{num, target-num});
                mp[num]--;
                mp[target-num]--;
            }
        }
        return res;
    }

 

参考链接:https://leetcode-cn.com/problems/pairs-with-sum-lcci/solution/ha-xi-biao-shuang-100-by-int-myheart-2/

posted @ 2020-03-25 22:16  Rogn  阅读(708)  评论(0编辑  收藏  举报