//最长连续序列:给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
int longestConsecutive(vector<int>& nums) {
unordered_set<int> numSet(nums.begin(), nums.end()); // 将数组转换为哈希集合,以便快速查找元素
int longestStreak = 0;
for (int num : numSet) {
// 如果当前数字是一个连续序列的起点(即前一个数不存在于集合中),则开始计算连续序列的长度
if (numSet.find(num - 1) == numSet.end()) {
int currentNum = num;
int currentStreak = 1;
// 向后依次检查连续的元素是否存在于集合中,直到找到连续序列的末尾
while (numSet.find(currentNum + 1) != numSet.end()) {
currentNum++;
currentStreak++;
}
// 更新最长连续序列的长度
longestStreak = max(longestStreak, currentStreak);
}
}
return longestStreak;
}
int main() {
vector<int> nums = { 3, 2, -3, 6, 4, 10, 12 };
cout << longestConsecutive(nums);
return 0;
}