题干:
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 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
示例 3:
输入:nums = [1,0,1,2] 输出:3
解题思路:假设最长连续序列的第一个元素为x,那么在原数组中将无法找到x-1,否则矛盾,基于这个想法,可以想到用哈希来优化查找,有些哈希题使用unordered_map,这道题则用unordered_set,区别在与用map的不光需要查找某个元素,还需要获取与这个元素相关的信息,比如序列号等,这道题只需要查找,因此用unordered_set即可。
AC代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int temp;
vector<int> a(n);
unordered_set<int> b;
for(int i=0;i<n;i++){
cin>>temp;
a[i] = temp;
}
for(const int& x: a){
b.insert(x);
}
int result = 0;
for(const int& y: b){
int currenty = y;
int currentlength = 1;
if(b.count(currenty-1)){
continue;
}
while(b.count(currenty+1)){
currentlength += 1;
currenty += 1;
}
result = max(result, currentlength);
}
cout << result;
return 0;
}
813

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



