【LEETCODE】128.最長連續序列

題目

給定一個未排序的整數數組,找出最長連續序列的長度。
要求算法的時間複雜度爲 O(n)。

思路

一次遍歷無法找到整個連續序列最長的子序列。如果使用暴力解法需要O(n^2),不滿足題目要求。
因此考慮使用哈希表解決問題。
1.遍歷一次數組,將數組中所有數據入哈希表;
2.找到序列最長的子序列:因爲要求時間複雜度最小,因此需要避免一個子序列中的多個元素被重複判斷多次
解決這個問題的方法是:每次判斷前,確定當前數據num沒有前驅,即不存在numSet.constains(num-1)
這樣可以保證每一個子序列中的元素只在內部循環中出現一次。

代碼

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> numSet = new HashSet<>();
        for(int i:nums){
            numSet.add(i);
        }
        int longestLen=0;
        for(int i:numSet){
            if(!numSet.contains(i-1)){
                int curNum=i;
                int curLen=1;
           
            while(numSet.contains(curNum+1)){
                curNum+=1;
                curLen+=1;
            }
            longestLen=Math.max(longestLen,curLen); 
        }
        }
        return longestLen;
    }
}

複雜度分析

  1. 時間複雜度:O(n)
  2. 空間複雜度:O(n)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章