日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode:Longest Consecutive Sequence

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。