【leetcode刷题】2150. 找出数组中的所有孤独数字(使用map)

给你一个整数数组 nums 。如果数字 x 在数组中仅出现 一次 ,且没有相邻数字(即,x + 1 和 x - 1)出现在数组中,则认为数字 x 是 孤独数字 。

输入:nums = [10,6,5,8]
输出:[10,8]
解释:

  • 10 是一个孤独数字,因为它只出现一次,并且 9 和 11 没有在 nums 中出现。
  • 8 是一个孤独数字,因为它只出现一次,并且 7 和 9 没有在 nums 中出现。
  • 5 不是一个孤独数字,因为 6 出现在 nums 中,反之亦然。
    因此,nums 中的孤独数字是 [10, 8] 。
var nums = [10, 6, 5, 8, 5]

var map = new Map()
//用哈希表保存数组里的每一个数为键,若是首次创建,值为0,否则值+1
for (const num of nums) {
  if (map.has(num)) {
    map.set(num, map.get(num) + 1)
  } else {
    map.set(num, 0)
  }
}

var res = []
//遍历哈希表,找出值为0,且num+1和num-1都不是键的数
for (const [num, count] of map) {
  if (count == 0 && !map.has(num + 1) && !map.has(num - 1)) {
    res.push(num)
  }
}

console.log(res)

map相关知识:

  • map.get(键) 获取键所对应的值,若没有匹配到对应的键,返回undefined
  • map.set(键,值) 设置键对应的值
  • map.has(键) 查找有没有该键,返回布尔值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值