题目 最长连续序列
给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
题解 哈希表
不能排序!!!
先建立一个set<int>
容器,然后将nums
里面的各个数据插入到容器中,达到去除重复的目的。
然后遍历整个nums
容器,对于其中的数据num
,检查num - 1
是否存在于set
容器中,如果不存在,说明这是一个子序列的开头,进入条件范围,定义一个变量n
与num
相等,进入循环判断while(hash.count(n + 1)) n++
,最终长度为n - num + 1
,与之前留下来的值比较取最大值!
完整代码如下:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> hash;
for(auto num : nums)
hash.insert(num);
int res = 0;
for(auto num : nums){
if(!hash.count(num - 1)){
int n = num;
while(hash.count(n + 1))
n++;
res = max(res, n - num + 1);
}
}
return res;
}
};