K 和数对的最大数目
#leetcode
#算法/哈希
#2024/07/28
目录
1. 题目及理解
2. 解题思路
- 思路一:使用 hash 正常遍历思路即可
- 边界情况处理:如果存在两个相同的值的场景
- 思路二:先排序,然后使用双指针,这里没写代码了
3. 代码实现
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var maxOperations = function (nums, k) {
// 用于记录重复元素的个数
let map = new Map();
// 初始化 map
for (const num of nums) {
map.set(num, (map.get(num) || 0) + 1);
}
// 代表最大操作次数
let count = 0;
for (const num of nums) {
// 需要的另一个数,即 num + need = k
const need = k - num;
// 确保 num 和 need 存在的个数都大于 0,才能进行操作
if (map.get(need) > 0 && map.get(num) > 0) {
// 如果 num === need,且 map 中的值小于 2,则不满足条件
if (num === need && map.get(num) < 2) continue;
// 更新 map 中的值
map.set(num, map.get(num) - 1);
map.set(need, map.get(need) - 1);
// 更新 count
count++;
}
}
return count;
};
- 两个 for 循环为了更好的理解
3.1. 复杂度分析
4. 代码实现二
- 先排序,然后使用双指针,这里没写代码了
5. 错误记录
- 不能使用
map.has
,代表是否有某个属性值