題目: 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. 題意在線性的時間內找到集合中元素組成的最長的連續序列。 規定只能線性的復雜度,顯然不能排序了,就想到用哈希去標記處理。 先遍歷一邊把所有的元素存起來,然後重頭遍歷,每遇到一個沒處理過的元素, 用兩個指針分別向兩個方向尋找連續的元素,記錄長度,並把元素標記成處理過,防止重復處理。 開始用靜態數組標記,發現數據范圍爆了,改成map去存就過了。 嚴格上應該寫成哈希表的形式,map存儲的復雜度大於O(n),但時間沒卡那麼緊,意思明白就行懶得改了。
class Solution { public: int longestConsecutive(vector<int> &num) { map<int,bool>m; int i,j,k,len=num.size(),maxx=0; for(i=0;i<len;++i)m[num[i]]=true; for(i=0;i<len;++i) { if(m[num[i]]==true) { m[num[i]]=0; int n=1; int left=num[i]-1,right=num[i]+1; while(m[left]==true) { m[left--]=0; n++; } while(m[right]==true) { m[right++]=0; n++; } maxx=max(maxx,n); } } return maxx; }