算法-數組的最長連續序列長度

算法-數組的最長連續序列長度

1、數組的最長連續序列長度

題目是Hard級別的,因爲我們要把時間複雜度降低到n

128. 最長連續序列

給定一個未排序的整數數組,找出最長連續序列的長度。
要求算法的時間複雜度爲 O(n)。

示例:

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

看到這個題目,首先想到的就是排個序,找連續序列,但是時間複雜度不滿足要求

但是藉助HashSet我們可以做到n

1、遍歷數組,放入HashSet
2、遍歷數組,看小於當前元素的值n-1是不是在HashSet裏面,如果不是,我們計算以當前值n開頭的連續序列長度
3、由於我們只會從序列開頭遍歷,因此每個元素訪問了一次,所以,時間複雜度爲n

public int longestConsecutive(int[] nums) {
	Set<Integer> set=new HashSet<>();
	for(int n:nums){
		set.add(n);
	}
	int maxLen=0;
	for(int n:nums){
		if(!set.contains(n-1)){//判斷元素是不是數列開頭
			int count=0;
			while(set.contains(n++)){//判斷序列是否到頭了
				count++;
			}
			maxLen=maxLen>count?maxLen:count;
		}
	}
	return maxLen;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章