leetcode128——Longest Consecutive Sequence

題目大意:求未排序數組中的最長連續序列的長度,要求時間複雜度爲O(n)。例如[100,4,200,1,3,2],len=4。

分析:哈希表unordered_set。

原題=>遍歷數組時需要判斷某個數(大一或小一)是否存在=>用哈希表(查詢O(1))。

num依次插入set,遍歷set,對每個num都嘗試匹配num+1,num+2...是否存在。最壞還是O(n²)。

所以加上“跳過邏輯”:存在num-1時跳過,也就是隻有num爲連續序列的第一個數的時候,纔開始內層循環匹配。達到了O(n)。

代碼:

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int> num_set;
        for (int num : nums) {
            num_set.insert(num);
        }
        int longestStreak = 0;
        for (int num : num_set) {
            if (!num_set.count(num - 1)) { //不是連續序列的第一個數就跳過
                int currentNum = num;
                int currentStreak = 1;
                while (num_set.count(currentNum + 1)) { //內層循環匹配判斷是否存在
                    currentNum++,currentStreak++;
                }
                longestStreak = max(longestStreak, currentStreak);
            }
        }
        return longestStreak;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章