題目
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.
思路
這道題是個典型的尋找連接的題目(union-find),這裏我們的解題思路如下:
- 將數組中的數值存儲到哈希表中,這裏需要O(n)的時間複雜度
- 然後遍歷數組,同時每次判斷num-1是否在數組中,如果存在就繼續繼續遍歷下去,如果不存在,就num+1,num+2,判斷連續最長的數是多少
講道理這個思路很巧妙
代碼
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
//掃描一遍數組,利用哈希表存儲數字,如果數字出現兩次只存儲一個
unordered_map<int,int> mp;
for(int item: nums)
{
mp[item]=1;
}
//再次掃描一遍數組
int best=0;
for(int item:nums)
{
if(mp.find(item-1)==mp.end())
{
int end = item + 1;
while(mp.find(end)!=mp.end())
{
end+=1;
}
best = max(end-item,best);
}
}
return best;
}
};