给你一个整数数组 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(键) 查找有没有该键,返回布尔值