https://leetcode-cn.com/problems/longest-consecutive-sequence/
給定一個未排序的整數(shù)數(shù)組拔疚,找出最長連續(xù)序列的長度。
要求算法的時間復(fù)雜度為 O(n)既荚。
- 用哈希表存儲每個端點值對應(yīng)連續(xù)區(qū)間的長度
- 若數(shù)已在哈希表中:跳過不做處理
- 若是新數(shù)加入:
取出其左右相鄰數(shù)已有的連續(xù)區(qū)間長度
計算當(dāng)前數(shù)的區(qū)間長度
根據(jù)當(dāng)前區(qū)間長度更新最大長度的值
更新區(qū)間兩端點的長度值
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_map<int,int> ma;
int ans=0;
for(int i=0;i<nums.size();i++){
int t=nums[i];
if(!ma[t]){
int l=ma[t-1],r=ma[t+1];
ma[t]=ma[t+r]=ma[t-l]=l+r+1;
ans=max(ans,ma[t]);
}
}
return ans;
}
};