题目:
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
题目链接:Longest Consecutive Sequence
C++:
一般做就是排序然后遍历一遍, 时间复杂度是O(logn), 但是要求了时间复杂度为O(n), 所以使用了set进行实现了O(1)的hash查找每一个连续子序列的最小元素进行遍历记录
class Solution {
public:
int longestConsecutive(vector<int>& nums){
unordered_set<int> nums_set;
for(auto e : nums)
nums_set.insert(e);
int max = 0;
int temp;
int count;
for(auto e : nums_set){
if(nums_set.count(e - 1))
continue;
else{
temp = e + 1;
count = 1;
while(nums_set.count(temp)){
temp++;
count++;
}
if(count > max)
max = count;
}
}
return max;
}
};