LeetCode题解:2341. 数组能形成多少数对,哈希表,详细注释

111 阅读1分钟

原题链接:

LeetCode题解:2341. 数组能形成多少数对

解题思路:

  1. 遍历数组,并使用Map缓存数字出现的次数关系
    • 如果出现偶数次,map.set(num, true)
    • 如果出现奇数次,map.set(num, false)
  2. 剩余数字的数量为nums.length - 2 * pairCount
/**
 * @param {number[]} nums
 * @return {number[]}
 */
var numberOfPairs = function(nums) {
  let map = new Map() // 使用Map缓存数字是否成对
  let pairCount = 0 // 统计数对数量
  
  for (const num of nums) {
    // 如果已记录了数字:
    // 1. 已记录数字成对:存储false
    // 2. 已记录数字不成对:存储true
    // 如果未记录数字:存储false,表示数字出现一次
    map.set(num, map.has(num) ? !map.get(num) : false)

    // 如果map.get(num)为true,表示数字成对,记录1个数量
    if (map.get(num)) {
      pairCount++
    }
  }

  // 返回数对数量
  // 剩余数字数量,可以根据数对数量计算得出
  return [pairCount, nums.length - 2 * pairCount]
};