03、最长连续数列:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度

文章目录

  • 1、题目描述
    • [1.1 移动所有零至数组末尾](#1.1 移动所有零至数组末尾)
    • [1.2 示例](#1.2 示例)
  • 2、解题思路
    • [2.1 思路讲解](#2.1 思路讲解)
    • [2.2 动画演示( 待补充)](#2.2 动画演示( 待补充))
  • 3、答案
    • [3.1 Java 代码](#3.1 Java 代码)
    • [3.2 运行结果](#3.2 运行结果)
  • [4、视频讲解( 待补充)](#4、视频讲解( 待补充))

1、题目描述

1.1 移动所有零至数组末尾

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

1.2 示例

示例 1:

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

示例 2:

复制代码
输入:nums = [0,3,7,2,5,8,4,6,0,1] 
输出:9

2、解题思路

2.1 思路讲解

  • 可利用滑动窗口
  • 利用 L 和 R 标记最长序列的首位下标
  • 连续数列即相邻的两个数字相同或差值为 1
  • 循环中,当前值和上一次循环时数值不连续,统计R 和 L 的差值即可
  • 每次计算连续数列,更新最大长度,最终输出最大序列的长度
  • 注意边界值的处理

2.2 动画演示( 待补充)

3、答案

3.1 Java 代码

java 复制代码
public class _03_最长连续序列 {
    public static void main(String[] args) {
        System.out.println(longestConsecutive(new int[]{}));
        System.out.println(longestConsecutive(new int[]{0, 1, 1, 2, 4, 5, 5, 6, 7, 8}));
        System.out.println(longestConsecutive(new int[]{0, 1, 1, 2, 4, 5, 5, 6, 7, 8, 10}));
        System.out.println(longestConsecutive(new int[]{100, 4, 200, 1, 3, 2}));
        System.out.println(longestConsecutive(new int[]{0, 3, 7, 2, 5, 8, 4, 6, 0, 1}));
    }

    public static int longestConsecutive(int[] nums) {
        if (nums == null || nums.length < 1) {
            return 0;
        }
        Arrays.sort(nums);
        // ans:返回值 left、right:连续序列 min、max 值的下标,diff:连续两个数值的差值
        int ans = 1, left = 0, right = 0, diff;
        for (int i = 1; i < nums.length; i++) {
            diff = nums[i] - nums[i - 1];
            if (diff <= 1)  // 和上一个数字是连续的
                right++;
            if (diff > 1) { // 和上一个数字不连续,计算上个连续序列的长度
                ans = Math.max(ans, nums[right] - nums[left] + 1);
                left = i;
                right = i;
            }
            if (i == nums.length - 1) // 边界值
                ans = Math.max(ans, nums[i] - nums[left] + 1);
        }
        return ans;
    }
}

3.2 运行结果

4、视频讲解( 待补充)

相关推荐
不穿格子的程序员8 分钟前
从零开始刷算法——贪心篇1:跳跃游戏1 + 跳跃游戏2
算法·游戏·贪心
大江东去浪淘尽千古风流人物10 分钟前
【SLAM新范式】几何主导=》几何+学习+语义+高效表示的融合
深度学习·算法·slam
铉铉这波能秀18 分钟前
LeetCode Hot100数据结构背景知识之列表(List)Python2026新版
数据结构·leetcode·list
重生之我是Java开发战士24 分钟前
【优选算法】模拟算法:替换所有的问号,提莫攻击,N字形变换,外观数列,数青蛙
算法
仟濹30 分钟前
算法打卡 day1 (2026-02-06 周四) | 算法: DFS | 1_卡码网98 可达路径 | 2_力扣797_所有可能的路径
算法·leetcode·深度优先
yang)31 分钟前
欠采样时的相位倒置问题
算法
历程里程碑34 分钟前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
A尘埃36 分钟前
物流公司配送路径动态优化(Q-Learning算法)
算法
天若有情67337 分钟前
【自研实战】轻量级ASCII字符串加密算法:从设计到落地(防查岗神器版)
网络·c++·算法·安全·数据安全·加密
啊森要自信1 小时前
CANN ops-cv:AI 硬件端视觉算法推理训练的算子性能调优与实战应用详解
人工智能·算法·cann