最長連續序列-動態規劃

問題描述

給定一個未排序的整數數組,找出最長連續序列的長度。在這裏插入代碼片

要求算法的時間複雜度爲 O(n)。

示例:

輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度爲 4。

解決思路

1、將所有數組裝進HashSet中,HashSet的查詢時間複雜度爲O(1)
2、對數組中每一個元素進行檢查
3、如果沒有小於當前元素的數,當前元素肯定就是起點
4、從起點處在HashSet裏找連續的數

代碼

class Solution {
    public int longestConsecutive(int[] nums) {
        
        HashSet<Integer> set=new HashSet<>();
        
        for(int i=0;i<nums.length;i++){
            set.add(nums[i]);
        }
        
        int maxLen=0;//記錄最長序列的長度
        for(int i=0;i<nums.length;i++){
        	//找到連續序列的起點
            if(!set.contains(nums[i]-1)){
                int count=1;//記錄序列元素數量
                int cur=nums[i];//當前元素
                while(set.contains(cur+1)){
                    count++;
                    cur++;
                }
                if(count>maxLen){
                    maxLen=count;
                }
            }
        }
        return maxLen;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章