给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9
提示:
0 <= nums.length <= 104
-109 <= nums[i] <= 109
数据存入一个hash,一个变量a表示连续的下一个数字,一个变量b表示当前已经是连续的几个数字了,当hash的下一个数字x不是想要的数字的时候,重置b并且将a与x同步。
不是O(n)
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
map<int, bool> m;
int n = nums.size();
if (n == 0) return 0;
for (int i = 0; i < n; ++i) m[nums[i]] = true;
int ans = 0;
int cnt = 0;
int maxn = -1;
auto it = m.begin();
for (; it != m.end(); ++it) {
if (it->first != cnt) {
cnt = it->first;
ans = max(ans, cnt);
ans = 0;
}
cnt++;
ans++;
if (ans > maxn) maxn = ans;
}
return maxn;
}
};