使用哈希表Map解决最长连续序列中的疑惑
var longestConsecutive = (nums) => {
let map = new Map()
let max = 0
for (const num of nums) { // 遍历nums数组
if (!map.has(num)) { // 重复的数字不考察,跳过
let preLen = map.get(num - 1) || 0 // 获取左邻居所在序列的长度
let nextLen = map.get(num + 1) || 0 // 获取右邻居所在序列的长度
let curLen = preLen + 1 + nextLen // 新序列的长度
map.set(num, curLen) // 将自己存入 map
max = Math.max(max, curLen) // 和 max 比较,试图刷新max
map.set(num - preLen, curLen) // 更新新序列的左端数字的value
map.set(num + nextLen, curLen) // 更新新序列的右端数字的value
}
}
return max
}
示例一:nums =
[100,4,200,1,3,2]
哈希表的方法我不太理解,没有排序的话,怎么知道成序列的。
比如遍历过程中,拿示例一举例,100,直接放入哈希表,key100,value1;
之后4放入哈希表,更新左侧序列长度吗?这里是不是需要添加一个判断是否更新序列左侧的数字。