标签:查找 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; }
标签:查找 class cto targe turn 链接 target 一个 双指针
原文地址:https://www.cnblogs.com/lfri/p/12571013.html