//最长连续序列:给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 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;
}
该篇文章介绍了如何利用哈希集合实现一个时间复杂度为O(n)的算法,寻找给定未排序整数数组中的最长连续序列的长度,通过遍历并检查连续元素是否存在来确定最长序列。
2195

被折叠的 条评论
为什么被折叠?



