当前位置: 首页 > news >正文

最短无序连续子数组

题目链接

最短无序连续子数组

题目描述

注意点

  • 找出符合题意的 最短 子数组,并输出它的长度
  • -100000 <= nums[i] <= 100000

解答思路

  • 本题的数组可以分为三段,左段中段和右段,如下图所示

  • 观察规律可知,左段元素始终比中段小,右段元素始终比中段大,区别是中段中的元素不是严格递增的,所以关键是要找到中段的左右边界
  • 将中段的左右边界分别定义为begin和end,进行两次遍历
    • 从左到右维护一个最大值max,在进入右段之前,那么遍历到的nums[i]都是小于max的,end也就是遍历中最后一个小于max元素的位置(进入右端后新的元素始终都比之前维护的max大)
    • 从右到左维护一个最小值min,在进入左段之前,那么遍历到的nums[i]也都是大于min的,begin也就是最后一个大于min元素的位置(进入左端后新的元素始终都比之前维护的min小)

代码

class Solution {public int findUnsortedSubarray(int[] nums) {int n = nums.length;int maxValue = Integer.MIN_VALUE;int minValue = Integer.MAX_VALUE;int begin = 0;int end = -1;for (int i = 0; i < n; i++) {if (nums[i] < maxValue) {end = i;} else {maxValue = nums[i];}}for (int i = n - 1; i >= 0; i--) {if (nums[i] > minValue) {begin = i;} else {minValue = nums[i];}        }return end - begin + 1;}
}

关键点

  • 双指针的思想
  • 怎么找到中段的左右边界
http://www.lryc.cn/news/194910.html

相关文章:

  • 更新 | 持续开源迅为RK3568驱动指南第十二篇-GPIO子系统
  • centos7安装erlang23.3.4.11及rabbitmq3.9.16版本
  • VMware和Debian下载
  • mysql面试题48:MySQL中 Innodb的事务与日志的实现方式
  • 数据结构 优先级队列(堆)
  • 如何在edge浏览器中给PDF添加文字批注
  • 集成学习的小九九
  • 深入理解Scrapy
  • 想做WMS仓库管理系统,找了好久才找到云表
  • 公司销售个人号如何管理?
  • COLE HERSEE 48408 工业4.0、制造业X和元宇宙
  • 【Vue基础-数字大屏】加载动漫效果
  • CSS 样式简写
  • SQL Server创建数据库
  • 树莓派安装.NET 6.0
  • 小华HC32F448串口使用
  • Redis实现简易消息队列的三种方式
  • 基于SpringBoot的在线小说阅读平台系统
  • VMware Workstation 与 Hyper-V 不兼容。请先从系统中移除 Hyper-V 角色
  • uniapp h5 MD5加密
  • 2023_Spark_实验十八:安装FinalShell
  • 文件服务器管理服务器怎么设置
  • LeetCode每日一题——Single Number
  • 有什么手机软件能分离人声和音乐?
  • 私人服务器可以干嘛
  • 【EI会议征稿】第三届高性能计算与通信工程国际学术会议(HPCCE 2023)
  • 项目管理,如何做到流程标准化?
  • windows编译ollvm笔记
  • 问:TCP/IP协议栈在内核态的好还是用户态的好
  • JavaScript-Vue基础语法-创建-组件-路由