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.
Solution:
We store the number into a map. For each number, we try to find its right and its left as far as we can, by check if map contains number + 1 and number - 1. If we cannot find any left or right, this means the consecutive list containing the number has terminated
Code:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
map<int,int> mapp;
for(int i =0; i < nums.size(); i ++){
mapp[nums[i]] = 1;
}
int max_len = 0;
for(int i =0; i < nums.size(); i ++){
int cur = nums[i];
int curLen = 0;
while(mapp.find(cur)!=mapp.end()){
mapp.erase(cur);
cur--;
curLen++;
}
cur = nums[i] + 1;
while(mapp.find(cur)!=mapp.end()){
mapp.erase(cur);
cur++;
curLen++;
}
max_len = max(max_len, curLen);
}
return max_len;
}
};