对Map.keys()api的使用
题目:
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。
现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。
数组的子序列是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。 示例 1:
输入: nums = [1,3,2,2,5,2,3,7]
输出: 5
解释: 最长的和谐子序列是 [3,2,2,2,3]
代码:
var findLHS = function(nums) {
let map = new Map()
let res = 0
/* for(let i = 0 ; i < nums.length; i++) {
if(map.has(nums[i])) {
map.set(nums[i],map.get(nums[i]))
}else{
map.set(nums[i],1)
}
} */
// 利用for of 和 map.get简化代码
for(let val of nums) {
// 没有则赋值为0
map.set(val,(map.get(val)||0)+1)
}
// keys() values() 返回一个引用的迭代器对象
// for of 原理是遍历可迭代对象
// 1->1个 2->3个
for(let key of map.keys()) {
//因为差别为1 所以判断map中是否有比当前值大1
if(map.has(key+1)){
// 判断 取最大值
res = Math.max(res,map.get(key)+map.get(key+1))
}
}
return res
};