算法-数组的最长连续序列长度

算法-数组的最长连续序列长度

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章