天天看點

LeetCode OJ - Longest Consecutive Sequence

這道題中要求時間複雜度為o(n),首先我們可以知道的是,如果先對數組排序再計算其最長連續序列的時間複雜度是o(nlogn),是以不能用排序的方法。我一開始想是不是應該用動态規劃來解,發現其并不符合動态規劃的特征。最後采用類似于中出現的資料結構(集快速查詢和順序周遊兩大優點于一身)來解決問題。具體來說其資料結構是hashmap<integer,lnode>,key是數組中的元素,所有連續的元素可以通過lnode的next指針相連起來。

總體思路是,順序周遊輸入的數組元素,對每個元素先看下hashmap的key中是否已經有這個元素,如果有則無需做任何事情,如果有,再看下這個元素的左鄰居也就是比它小1的元素是否在,如果在的話把左鄰居的lnodel的next指針指到目前這個元素的lnode,然後再看右鄰居的元素是否存在hashmap中,如果在,則把目前指針的next指到右鄰居節點上,通過反複這樣的操作,最後所有連續的sequece的lnode都被連在一起。

之後再計算哪個連續的連結清單長度最長。

下面是ac代碼: