LeetCode: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.
分析:
算法1:首先想到的是排序,排序后遍歷一遍就可以找出最長連續序列的長度,只是要稍微注意下判斷連續序列的過程中有可能兩個元素相同,比如1 2 2 3,排序復雜度n*log(n),雖然題目要求O(n)復雜度,但是這個解法也可以通過OJ,代碼如下:
1 class Solution { 2 public: 3 int longestConsecutive(vector<int> &num) { 4 // IMPORTANT: Please reset any member data you declared, as 5 // the same Solution instance will be reused for each test case. 6 int res = 1, len = num.size(); 7 if(len == 0)return 0; 8 sort(num.begin(), num.end()); 9 int curr = 1; 10 for(int i = 1; i < len; i++) 11 { 12 if(num[i] - num[i-1] == 1) 13 { 14 curr++; 15 if(curr > res)res = curr; 16 } 17 else if(num[i] - num[i-1] == 0); 18 else 19 curr = 1; 20 } 21 return res; 22 } 23 }; View Code算法2:想要O(n)的算法,我們只有以時間換空間,先把數組中所有元素映射到哈希表。然后以題目給出的數組為例:對于100,先向下查找99沒找到,然后向上查找101也沒找到,那么連續長度是1,從哈希表中刪除100;然后是4,向下查找找到3,2,1,向上沒有找到5,那么連續長度是4,從哈希表中刪除4,3,2,1。這樣對哈希表中已存在的某個元素向上和向下查找,直到哈希表為空。算法相當于遍歷了一遍數組,然后再遍歷了一遍哈希表,復雜的為O(n)。代碼如下: ? ? ? ? ? ? ? ? ? ? ? ? ? ?本文地址
1 class Solution { 2 public: 3 int longestConsecutive(vector<int> &num) { 4 // IMPORTANT: Please reset any member data you declared, as 5 // the same Solution instance will be reused for each test case. 6 int res = 1, len = num.size(); 7 if(len == 0)return 0; 8 unordered_set<int> hashtable; 9 for(int i = 0; i < len; i++) 10 hashtable.insert(num[i]); 11 while(hashtable.empty() == false) 12 { 13 int currlen = 1; 14 int curr = *(hashtable.begin()); 15 hashtable.erase(curr); 16 int tmp = curr-1; 17 while(hashtable.empty()==false && 18 hashtable.find(tmp) != hashtable.end()) 19 { 20 hashtable.erase(tmp); 21 currlen++; 22 tmp--; 23 } 24 tmp = curr+1; 25 while(hashtable.empty()==false && 26 hashtable.find(tmp) != hashtable.end()) 27 { 28 hashtable.erase(tmp); 29 currlen++; 30 tmp++; 31 } 32 if(res < currlen)res = currlen; 33 } 34 return res; 35 } 36 };【版權聲明】轉載請注明出處:http://www.cnblogs.com/TenosDoIt/p/3422249.html
轉載于:https://www.cnblogs.com/TenosDoIt/p/3422249.html
總結
以上是生活随笔為你收集整理的LeetCode:Longest Consecutive Sequence的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos6.4下安装配置JDK+TO
- 下一篇: OGNL表达式介绍