码迷,mamicode.com
首页 > 编程语言 > 详细

在无序数组中所有发现和为sum的数对

时间:2020-03-25 23:21:48      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:查找   class   cto   targe   turn   链接   target   一个   双指针   

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

分析:

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

另一种是先用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/

在无序数组中所有发现和为sum的数对

标签:查找   class   cto   targe   turn   链接   target   一个   双指针   

原文地址:https://www.cnblogs.com/lfri/p/12571013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!