说明
-
和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。
-
现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。
-
输入: [1,3,2,2,5,2,3,7]
输出: 5
原因: 最长的和谐数组是:[3,2,2,2,3].
思路
- 创建一个map用于统计数组中的值,及值出现的次数
- 创建一个max,用来保存出现的最大次数
- 遍历map,在map中寻找比当前值大1的值出现的次数
var findLHS = function (nums) {let map = new Map();for (let i = 0; i < nums.length; i++) {if (map.has(nums[i])) {map.set(nums[i], map.get(nums[i]) + 1)} else {map.set(nums[i], 1);}}let max = 0;for(let [key , value] of map){if(map.has(key +1)){max = Math.max(max, map.get(key +1) + map.get(key));}}return max
};
总结
- map的初始化
const map = new Map()
- 判断map中是否含有某个元素
map.has(xxx)
- 获取map的值
map.get(xxx)
- 设置map的值
map.set(xxx, yyy)
- map的遍历
for(let [key, value] of map) { xxx }