給定一個未排序的整數數組,找出最長連續序列的長度。
要求算法的時間複雜度爲 O(n)。
示例:
輸入: [100, 4, 200, 1, 3, 2] 輸出: 4 解釋: 最長連續序列是[1, 2, 3, 4]。它的長度爲 4。
兩種方法,一種map,一種set。
map注意除重。
class Solution { public: int longestConsecutive(vector<int>& nums) { int res=0; unordered_set<int>s(nums.begin(),nums.end()); for(int val:nums) { if(!s.count(val)) continue; s.erase(val); int pre=val-1,next=val+1; while(s.count(pre)) s.erase(pre--); while(s.count(next)) s.erase(next++); res=max(res,next-pre-1); } return res; } }; set的方法,用兩個指針pre,next分別向兩邊掃,記錄一個next-pre-1的最大值即可 class Solution { public: int longestConsecutive(vector<int>& nums) { int res=0; map<int,int>m; for(int num:nums) { if(m.count(num)) continue; int left=m.count(num-1)?m[num-1]:0; int right=m.count(num+1)?m[num+1]:0; int sum=right+left+1; m[num]=sum; res=max(res,sum); m[num-left]=sum; m[num+right]=sum; } return res; } }; map的方法,分別找當前值得左邊和右邊極限,兩邊端點和當前值設置成left+right+1. 如果該值處理過了,就不在處理(set有除重機制)
Leetcode 128. 最長連續序列 DP
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.