Leetcode刷题java之128. 最长连续序列(一天一道编程题之四十七天)

执行结果:

通过

显示详情

执行用时 :5 ms, 在所有 Java 提交中击败了83.59% 的用户

内存消耗 :39.5 MB, 在所有 Java 提交中击败了5.25%的用户

题目:

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 O(n)。

示例:

输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-consecutive-sequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

利用一个hashset来查找,是否含有下一个大的元素,还有就是优化,遍历数组的时候,要从连续子序列的第一个数开始遍历,也就是num-1.

代码:

class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums.length==0)
        {
            return 0;
        }
        HashSet<Integer> hash=new HashSet<>();
        for(int num:nums)
        {
            hash.add(num);
        }
        int longest=1;
        for(int num:nums)
        {
            //优化,不需要每个都去找,而是从连续子序列的最小值先找
            if(!hash.contains(num-1))
            {
                int curLongest=1;
                int curValue=num;
                while(hash.contains(curValue+1))
                {
                    curLongest++;
                    curValue++;
                }
                longest=Math.max(longest,curLongest);
            }
        }
        return longest;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章