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; }
个性签名:时间会解决一切