LeetCode 128 最长连续序列
本题要求是给出一个无序数组,在数组种找出最长的连续序列,时间复杂度是O(n)。这道题并不难,主要是接触了一个新的数据结构,用哈希表实现的set,查找和插入可以在几乎O(1)的时间完成。遍历整个数组,如果在set种找到比当前数字小1的就跳过(该数不可能是连续序列中最小的数),如果没有找到,就从这个数开始一直向后找比它大1的数,直到找不到停止。统计出最长的连续序列。
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int ans = 0;
unordered_set<int> st;
for(auto i :nums)
{
st.insert(i);
}
for(auto i : nums)
if(!st.count(i-1))
{
int cur=i;
int cnt=1;
while(st.count(cur+1))
{
cur++;
cnt++;
}
ans=max(cnt,ans);
}
return ans;
}
};