【算法】【线性表】【数组】最长连续序列
1 题目
给定一个未排序的整数数组num
,找出最长连续序列的长度。
样例 1:
输入:
num = [100, 4, 200, 1, 3, 2]
输出:
4
解释:这个最长的连续序列是 [1, 2, 3, 4]. 返回所求长度 4
2 解答
public class Solution { /** * @param num: A list of integers * @return: An integer */ public int longestConsecutive(int[] num) { // write your code here // 1、当数组为空或者无元素时 if (num == null || num.length == 0) { return 0; } // 2、将num放置进set中用于快速判断 Set<Integer> numSet = new HashSet<>(num.length); for (int i : num) { numSet.add(i); } int res = 1; for (int i : num) { // 从下、上判断当前的连续性 // remove 是关键 能降低复杂度 int down = i - 1; int up = i + 1; int acc = 1; while (numSet.contains(down)) { acc++; numSet.remove(down); down--; } while (numSet.contains(up)) { acc++; numSet.remove(up); up++; } res = Math.max(res, acc); } return res; } }