一开始想用基数排序,但感觉写起来真的太复杂了,复杂度应该是1e6,算符号一共十位嘛。
这个用set的我感觉还得看版本,1.8用红黑树要是冲突太多还真不一定算O(n)
做法就是先去重,然后遍历维护ans。
如果x-1在set中存在,就不查,等到x-1的时候再查。
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer> set = new HashSet<>();
for(int num:nums) {
set.add(num);
}
int ans = 0;
for(Integer num : set) {
int temp = 1;
if(!set.contains(num-1)) {
while(set.contains(++num)) {
temp++;
}
ans = Math.max(temp, ans);
}
}
return ans;
}
}

该博客讨论了一种在Java中寻找数组中最长连续序列的解决方案。博主首先考虑使用基数排序,但由于实现复杂,转而采用HashSet。通过创建一个HashSet存储数组元素,遍历并检查相邻元素是否存在来找到最长序列。算法的时间复杂度与HashSet在不同Java版本中的实现有关,可能介于O(n)到O(n log n)之间。
391

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



