给定一个未排序的整数数组 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
将未排序的整数数组映射到存储单个元素的HashSet上。该HashSet相当于一个数轴。
接着就只需要判断该数轴上有几段分开的段,返回其中最长的段长度即可。
如何判断有几段分开的段呢,就是遍历该数轴,判断是否是数轴起点。如果是数轴起点,则开始计数,然后一直记到数轴上的空值。
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer>map = new HashSet();
for(int num : nums){
map.add(num);
}
int ans=0;
for(Integer i:map){
//判断该数是否是数轴的起点,不存在则说明是
if(!map.contains(i-1)){
int x= i;
int temp=1;
while(map.contains(x+1)) {
x++;
temp++;
}
ans = Math.max(ans, temp);
}
}
return ans;
}
}
26ms
击败 61.75%使用 Java 的用户
还行,不用继续优化了。