题目
代码(首刷自解)
放到set里面
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
if(nums.size() == 0)
return 0;
set<int> st;
for(auto& num : nums) {
st.insert(num);
}
int ans = 1, res = 1;
int pre = *st.begin();
for(auto& s : st) {
if(pre + 1 == s) {
ans++;
pre = s;
} else {
ans = 1;
pre = s;
}
res = max(res, ans);
}
return res;
}
};
代码(9.11 二刷自解)
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
if(nums.size() == 0)
return 0;
set<int> st;
for(int& n : nums)
st.insert(n);
int len = 1, maxLen = 1;
int cur = *st.begin();
for(int i : st) {
if(i != cur+1) {
len = 1;
cur = i;
} else {
maxLen = max(maxLen, ++len);
cur++;
}
}
return maxLen;
}
};
代码(9.30 三刷看解析 哈希表)
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
if(nums.empty())
return 0;
unordered_set<int> st;
for(int num : nums)
st.insert(num);
int res = 1;
for(int num : nums) {
if(st.count(num-1))
continue;
int curLen = 1, curNum = num;
while(st.count(curNum+1)) {
curLen++;
curNum++;
}
res = max(res, curLen);
}
return res;
}
};