1 题目
128. 最长连续序列
剑指 Offer II 119. 最长连续序列
2 代码实现
2.1 最小堆(O(nlogn))
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
priority_queue<int, vector<int>, greater<int>> minHeap;
unordered_set<int> s;
int longest = 0;
for(auto& i : nums)
{
if (!s.count(i))
{
s.insert(i);
minHeap.push(i);
}
}
while(!minHeap.empty())
{
int start = minHeap.top(), wanted = start+1, count = 1;
minHeap.pop();
while(minHeap.top() == wanted)
{
++wanted;
++count;
minHeap.pop();
}
longest = std::max(longest, count);
}
return longest;
}
};
2.2 哈希(O(n))
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> s;
for(auto& i : nums)
s.insert(i);
int longest = 0;
for (auto& i : s)
{
if (!s.count(i-1))
{
int start = i, wanted = start+1, count = 1;
while (s.count(wanted))
{
++wanted;
++count;
}
longest = std::max(longest, count);
}
}
return longest;
}
};