剑指 Offer II 119. 最长连续序列

190 阅读1分钟

剑指 Offer II 119. 最长连续序列

数组无顺序 + 连续序列要求项于项之间有差1的关联 => 想到了用set结构

if(arr.length === 0 ) return 0极端处理下

var set = new Set(arr) arr转换为set结构

var res = 1 不为空数组,初始化最长连续序列长度为1

for (var num of set) { 遍历set结构

var flag = !set.has(num - 1) 满足最长连续序列的首个数字num,则num-1一定是不存在的

if (flag) { 满足num-1不存在的num可能有很多,我们只需要在后面取最长的最优值即可

var i = num 记录一下最长连续序列的首个数字num

var j = 1 记录下连续序列的长度

while (set.has(i + 1)) { 循环判断num+1,num+2 。。。。存在的情况

i++ 如果num+1存在,则需要进一步判断num+2,依次类推

j++ 跟随上面记录下长度

res = Math.max(res, j) 选出最有解

var longestConsecutive = function (arr) {
    if(arr.length === 0 ) return 0
    var set = new Set(arr)
    var res = 1
    for (var num of set) {
        var flag = !set.has(num - 1)
        if (flag) {
            var i = num
            var j = 1
            while (set.has(i + 1)) {
                i++
                j++
                res = Math.max(res, j)
            }
        }
    }
    return res
};