之三:128.最长连续序列"/>
LeetCode Hot100之三:128.最长连续序列
题目
给定一个未排序的整数数组 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相当于一个数轴。
接着就只需要判断该数轴上有几段分开的段,返回其中最长的段长度即可。
如何判断有几段分开的段呢,就是遍历该数轴,判断是否是数轴起点。如果是数轴起点,则开始计数,然后一直记到数轴上的空值。
java代码
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 的用户
还行,不用继续优化了。
更多推荐
LeetCode Hot100之三:128.最长连续序列
发布评论