给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n)
的算法解决此问题
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> num_sets;
for(const int& num : nums){
num_sets.insert(num);
}
int length = 0;
for(const int& num : nums){
if(!num_sets.count(num - 1)){
int current_num = num;
int length1 = 1;
while(num_sets.count(current_num + 1)){
current_num ++;
length1 ++;
}
length = max(length,length1);
}
}
return length;
}
};
1.unordered_set和哈希表有什么关系?
unordered_set
在C++标准库中的实现是基于哈希表的。这意味着unordered_set
的所有操作(如插入、删除和查找)
insert
count
的平均时间复杂度都是常数时间O(1),这是因为哈希表通过哈希函数能够快速定位元素的位置。
2.const int& num : nums语法
3.通过在循环变量num
前面加上const
关键字,编译器将对其进行保护,以确保在循环体内不会意外地修改它的值