Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • 数组

    • 搜索

    • 二分查找

    • 排序

    • 边界判断

    • 双指针法

    • 连续子数组

      • 128.最长连续序列
      • 209.长度最小的子数组
      • 718.最长重复子数组
      • 152.乘积最大子数组
      • 581. 最短无序连续子数组
      • 918. 环形子数组的最大和
    • 差分数组

    • 模拟

    • 区间问题

  • 链表

  • 字符串

  • 二叉树

  • 动态规划

  • 深搜回溯

  • 数学贪心

  • 堆栈队列

  • 前缀和

  • 算法设计

  • 位运算

  • WA

  • 算法
  • 数组
  • 连续子数组
phan
2023-05-16

128.最长连续序列

# 128.最长连续序列

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

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

  1. 先Arrays.sort(nums)排序后再找,时间O(nlogn)或者O(n^2)。
  2. 空间换时间,用HashSet记录nums数组。然后遍历HashSet用中心扩散法,把一个元素左边相连区间和右边相连区间的元素从HashSet中删去,并记录比较该区间长度。这里有一个坑,遍历HashSet过程中外层循环不能够写成for(Integer i:HashSet),因为里层要HashSet.remove()删去整个区间内元素,容器会报异常,遍历过程中不能够对容器添加删除。因此外层要用nums遍历。
for(int i:nums)
  {
      if(hashset.remove(i))
      {
          int curr=i,left =curr - 1, right = curr + 1;
          while (hashset.remove(right)) right++;
          while (hashset.remove(left)) left--;
          res=right-left-1>res?right-left-1:res;
      }
 }
1
2
3
4
5
6
7
8
9
10
  1. 当容器中元素是Integer类型时,remove()方法可以是int类型,遍历容器时for(Integer i:hashset)。

    hashset.remove(e)可以同时用来判断是否存在,不存在则返回false,存在且删除成功返回true。

编辑 (opens new window)
#Leetcode#子数组
上次更新: 2023/12/15, 15:49:57
剑指 Offer 57. 和为s的两个数字
209.长度最小的子数组

← 剑指 Offer 57. 和为s的两个数字 209.长度最小的子数组→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式