🔗 leetcode.cn/problems/lo…
题目
- 给定无序数组,返回右数组元素组成的最长连续序列的长度
思路
- 数组排序,判断连续序列的长度,但排序算法时间复杂度至少 n log n
- 用 hash 记录以当前元素为结尾的,最长连续序列的长度
- 因为 c++ 中,map 是有序的,可以从最小的元素开始遍历,每次查找 item-1 是否存在,如果存在,更新以当前元素为结尾的最长序列的长度,记录这过程中的最大值
代码
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
if (nums.empty()) return 0;
map<int, int> m;
for (int num : nums) {
m[num] = 1;
}
int ans = 1;
for (const auto& pair : m) {
int key = pair.first;
if (m.find(key-1) != m.end()) {
int tmp = m[key] = m[key-1] + 1;
ans = max(ans, tmp);
}
}
return ans;
}
};