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;
    }
}

 

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