原题链接:最长连续序列
个人解法
本来想着用区间表示,如果出现一个值就看其相邻的是否有区间,做一个区间合并,但是没想出来。
看题解发现是一种动态规划的思想 动态规划
更好的解法
思路:
这个思路比较容易想到,既对于每一个数,都尝试往后看,看数组中是否存在这个数(用unordered_set,哈希表实现),那么若一个数的前一个数在哈希表中,就可以跳过,因为若前一个数存在,意味着前一个数是在一个更长的区间内,此时这个数是区间中间的某一个值,此时可以跳过。
时间复杂度: O ( n ) O(n) O(n)
代码:
class Solution {
public:
unordered_set<int> st;
int longestConsecutive(vector<int>& nums) {
for(auto &num : nums) st.insert(num);
int res = 0;
for(auto num : nums) {
if(st.count(num - 1)) continue;
int ans = 1;
while(st.count(num + 1)) {
++ ans;
++ num;
}
res = max(ans, res);
}
return res;
}
};