128. Longest Consecutive Sequence

題目

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.

Your algorithm should run in O(n) complexity.

思路

這道題是個典型的尋找連接的題目(union-find),這裏我們的解題思路如下:

  • 將數組中的數值存儲到哈希表中,這裏需要O(n)的時間複雜度
  • 然後遍歷數組,同時每次判斷num-1是否在數組中,如果存在就繼續繼續遍歷下去,如果不存在,就num+1,num+2,判斷連續最長的數是多少

講道理這個思路很巧妙

代碼

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        //掃描一遍數組,利用哈希表存儲數字,如果數字出現兩次只存儲一個
        unordered_map<int,int> mp;
        for(int item: nums)
        {
            mp[item]=1;
        }
        //再次掃描一遍數組
        int best=0;
        for(int item:nums)
        {
            if(mp.find(item-1)==mp.end())
            {
                int end = item + 1;
                while(mp.find(end)!=mp.end())
                {
                    end+=1;
                }
                best = max(end-item,best);
            }
        }
        return best;
    }
};
發佈了310 篇原創文章 · 獲贊 520 · 訪問量 70萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章