leetcode128. 最長連續(xù)序列--滑動窗口

知識點:滑動窗口

題目:給定一個未排序的整數(shù)數(shù)組,找出最長連續(xù)序列的長度。
難度:困難

要求算法的時間復(fù)雜度為 O(n)。

示例:

輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續(xù)序列是 [1, 2, 3, 4]。它的長度為 4。

一看到這個題就知道應(yīng)該用滑動窗口的思想做,但是在做的過程中犯了以下幾個錯誤??,,記錄一下。

  • 對數(shù)組排序以后,最長連續(xù)序列,沒有考慮到兩個連續(xù)的數(shù)一樣的狀況,所以在輸入【1,2,0,1】的時候出錯了
  • count 重置的時候想當(dāng)然的重置為了0,其實應(yīng)該重置為 1
  • 最后忘記再計算一遍len的長度
/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function(nums) {
    // 1.檢測邊界條件
    if(nums.length < 2) return nums.length
    
    // 2.數(shù)組從小到大進行排序
    nums = nums.sort((a, b) => a - b)
    
    // 3.開始查找
    let left = 0, current = 0, right = 1, len = 1, count = 1 
    while(right < nums.length) {
        // 3種情況:連續(xù)(count++);兩個數(shù)相同(不用處理,犯錯點);兩個數(shù)不連續(xù)(從新開始計算長度)
        const temp = nums[right] - nums[current]
        if( temp === 1) {
            // 連續(xù)
            count++
        } else if(temp > 1) {
            // 不連續(xù)了
            len = Math.max(len, count)
            left = right
            count = 1 // 這個地方要注意,重置為1,而不是0(犯錯點)
        }
        
        right++
        current++
    }
    
    // 4.這步不能忘記了(犯錯點)
    len = Math.max(len, count)
    // 5.返回結(jié)果
    return len
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容