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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode: Longest Consecutive Sequence [128]

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode: Longest Consecutive Sequence [128] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目】

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.


【題意】

? ? 給定一個未排序的整數數組。找長度最長的連續整數串序列。并返回長度。 復雜度要求O(n)


【思路】

? ? O(n)不一定是one pass, 腦子里總是有這么種固定思維,自己給自己挖了個坑。O(kn)也是O(n), 僅僅要k是常數。
? ? 要找連續串,又不能排序,那我們要構造一個類列表結構把連續的數串起來。

那么怎么串呢?非常顯然,給定一個數N。那我們須要知道他的前一個數prev和它的后一個數next是否存在,假設存在我們就能夠串到prev或者next, 假設不存在則連續串就結束鳥。我們用一個map來表示這樣的前后繼關系。
? ? prev=N-1; next=N+1; 假定N是存在于數組中的。則map[N]=1
? ? 假設prev也在數組中,則map[prev]=1, 否則map[prev]=0
? ? 假設next也在數組中,則map[next]=1, 否則map[next]=0
? ??
? ? 我們對數組進行兩遍掃描:
? ? 第一遍掃描是我們生成前后關系map
? ? 第二遍掃描利用前后關系恢復連續串,恢復過程中相應數的map[i]都置為0,避免反復恢復

? ??


【代碼】

class Solution { public:int longestConsecutive(vector<int> &num) {int size=num.size();if(size==0)return 0;//第一遍掃描建立前后關系mapmap<int, int> exist;for(int i=0; i<size; i++){exist[num[i]]=1;if(exist[num[i]-1]!=1)exist[num[i]-1]=0;if(exist[num[i]+1]!=1)exist[num[i]+1]=0;}//第二遍掃描int maxLength=0;for(int i=0; i<size; i++){if(exist[num[i]]==1){//恢復串int length=1;int number=num[i]-1;while(exist[number]==1){length++; exist[number]=0; number--;}number=num[i]+1;while(exist[number]==1){length++; exist[number]=0; number++;}if(length>maxLength)maxLength=length;}}return maxLength;} };

總結

以上是生活随笔為你收集整理的LeetCode: Longest Consecutive Sequence [128]的全部內容,希望文章能夠幫你解決所遇到的問題。

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