力扣hot100——128. 最长连续序列
题目链接:128. 最长连续序列 - 力扣(LeetCode)
思路: 由于时间复杂度要求O(n),所以排除排序的可能,排序的时间复杂度是O(nlogn)。
考虑使用哈希表,哈希表将查询的时间降到O(1);并且进行剪枝操作,遍历元素是x,如果x-1也在哈希表中,那么x-1为起点的序列一定比x为起点的序列长,此时跳过此次循环,执行下一次循环。
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int>us(nums.begin(),nums.end());//将数组转成哈希表
int res=0;
for(int i:us){
if(us.contains(i-1)){//i-1为起点的序列一定更长
continue;
}
int j=i+1;
while(us.contains(j)){//检查下一个数是否在集合中
j++;
}
res=max(j-i,res);
}
return res;
}
};
- 时间复杂度:O(n),所有元素最多访问两次(一次作为起点,一次被序列包含),n代表元素个数
- 空间复杂度:O(n)

浙公网安备 33010602011771号