Leetcode594. 最长和谐子序列

60 阅读1分钟

对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
};
打印map.keys()和调用next()方法:

image.png