/**
* 【数组中最长连续子数组】
* 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
* 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
* 链接:https://leetcode-cn.com/problems/longest-consecutive-sequence
* <p>
* 输入:nums = [100,4,200,1,3,2]
* 输出:4
* 解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
* <p>
* 分析:
* 1.用hash表降低复杂度
* 2.[1,2,3]中,如果已经对1做了longestConsecutive操作,就没必要对2和3做longestConsecutive操作:可以降低复杂度。
* 判定依据:map.get(n-1)是否存在
*
* @author xuan
* @create 2021-10-18 16:42
**/
public class ZuiChangLianXuXuLie {
public static void main(String[] args) {
int[] arr = {100, 4, 200, 1, 3, 2};
System.out.println(longestConsecutive(arr));
}
public static int longestConsecutive(int[] nums) {
if (nums.length == 0) {
return 0;
}
//set去重
Set<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
set.add(nums[i]);
}
//开始查找最长数字连续序列
int longest = 0;
for (Integer val : set) {
int innerLongest = 1;
if (set.contains(val - 1)) {
//小团伙的非头元素:跳过
continue;
}
//找到了小团伙的头元素,开始猜测小团伙长度
while (set.contains(++val)) {
innerLongest++;
}
longest = longest > innerLongest ? longest : innerLongest;
}
return longest;
}
}
数组中最长连续子数组
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 今天上午陪老妈看病,下午健身房跑步,晚上想想今天还没有断舍离,马上做,衣架和旁边的的布衣架,一看乱乱,又想想自己是...