1. 程式人生 > 其它 >leetcode128.最長連續序列

leetcode128.最長連續序列

leetcode128.最長連續序列

題目

給定一個未排序的整數陣列 nums ,找出數字連續的最長序列(不要求序列元素在原陣列中連續)的長度。

請你設計並實現時間複雜度為 O(n) 的演算法解決此問題。

用例

輸入:nums = [100,4,200,1,3,2]
輸出:4
解釋:最長數字連續序列是 [1, 2, 3, 4]。它的長度為 4。
輸入:nums = [0,3,7,2,5,8,4,6,0,1]
輸出:9

求解

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function(nums) {
    let res = 0
    //建立雜湊表
    let hash = new Object()
    for(let i=0;i<nums.length;i++){
        if(!hash[nums[i]]){
            let left_length = hash[nums[i]-1] || 0 
            let right_length = hash[nums[i]+1] || 0
            let new_length = left_length+right_length+1
            hash[nums[i]]=new_length
            res = Math.max(new_length,res)
            hash[nums[i]-left_length]=new_length
            hash[nums[i]+right_length]=new_length
        }
    }
    return res
};