首页 > 其他 > 详细

128. 最长连续序列

时间:2021-04-03 13:24:09      阅读:20      评论:0      收藏:0      [点我收藏+]

难度 hard

给定一个未排序的整数数组 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

提示:

0 <= nums.length <= 104
-109 <= nums[i] <= 109

解题思路:这道题虽然是hard级别,但解题上还是相对简单的,看了grandyang的题解的。用一个hashse保存数组中的所有元素,然后遍历数组,如果数组中某个元素存在,就把它从hashset中移除,并且令pre=nums[i]-1, next=nums[i]+1,然后继续往hashset中寻找,找到了就移除,这样就是不断地把和当前元素nums[i]能构成连续序列的所有数字都移除掉,然后更细结果,结果res = max(res, next - pre -1),因为退出寻找过程的时候,pre和next已经不是连续序列中的一员了,所以不应该算进连续序列的长度了。

代码 t86 s39 java

class Solution {
    public int longestConsecutive(int[] nums) {
        HashSet<Integer> st = new HashSet<>();
        int res = 0;
        for(int num : nums) st.add(num);
        for(int i=0; i<nums.length; i++){
            if(st.remove(nums[i])){
                int pre = nums[i]-1, next = nums[i]+1;
                while(st.remove(pre)) pre--;
                while(st.remove(next)) next++;
                res = Math.max(res, next - pre - 1);
            }
        }
        return res;
    }
}

参考资料
https://www.cnblogs.com/grandyang/p/4276225.html

128. 最长连续序列

原文:https://www.cnblogs.com/zhengxch/p/14613274.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!