数组中最长连续子数组

/**
 * 【数组中最长连续子数组】
 * 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
 * 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
 * 链接:https://leetcode-cn.com/problems/longest-consecutive-sequence
 * 

* 输入:nums = [100,4,200,1,3,2] * 输出:4 * 解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。 *

* 分析: * 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 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; } }

你可能感兴趣的:(数组中最长连续子数组)