Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
Your algorithm should run in O(n) complexity.
Example:
Input: [100, 4, 200, 1, 3, 2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]
. Therefore its length is 4.
使用O(n)的时间复杂度,查找最长连续序列,返回最长的长度
1.首先,只有找到 左边界,再去搜索右边界
2.其次,使用hashset来查找,下一个数字是否在数组中,时间复杂度为O(n)
代码如下:
class Solution {
public:
unordered_set<int> s;
int longestConsecutive(vector<int>& nums) {
s = unordered_set<int>(nums.begin(),nums.end());
int currnum, c = 0 ,mc = 0;
for(int i = 0; i < nums.size(); i++)
{
currnum = nums[i];
if(s.find(currnum - 1) == s.end())
{
c = 1;
while(s.find(currnum + 1) != s.end())
{
currnum +=1;
c++;
}
mc = max(mc,c);
}
}
return mc;
}
};