【LeetCode】【算法】581. 最短无序连续子数组

LeetCode 581. 最短无序连续子数组

题目描述

给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。

请你找出符合题意的 最短 子数组,并输出它的长度。

示例:

输入:nums = 2,6,4,8,10,9,15

输出:5

解释:你只需要对 6, 4, 8, 10, 9 进行升序排序,那么整个表都会变为升序排序。

解题思路

  1. 从左到右,本应从小到大排序,寻找那些突然发生从大到小排序的情况,记录下标right
  2. 从右到左,本应从大到小排序,寻找那些突然发生从小到大排序的情况,记录下标left
  3. 则最短排序长度为right-left+1

代码

java 复制代码
class Solution {
    public int findUnsortedSubarray(int[] nums) {
        int n = nums.length;
        int maxn = Integer.MIN_VALUE, right = -1;
        int minn = Integer.MAX_VALUE, left = -1;
        for (int i = 0; i < n; i++) {
            // 如果从左到右,出现了从大到小排序的情况,right就会被更新为突变的下标i
            if (maxn > nums[i]) {
                right = i;
            } else {
                maxn = nums[i];
            }
            // 如果从右到左,出现了从小排到大的情况,left就会被更新为突变的下标n-i-1
            if (minn < nums[n - i - 1]) {
                left = n - i - 1;
            } else {
                minn = nums[n - i - 1];
            }
        }
        return right == -1? 0: right - left + 1;
    }
}
相关推荐
学逆向的17 分钟前
汇编——位运算
开发语言·汇编·算法·网络安全
可编程芯片开发32 分钟前
基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器
算法
学究天人1 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷2)
算法·数学建模·动态规划·图论·抽象代数·拓扑学
玛卡巴卡ldf1 小时前
【LeetCode 手撕算法】(细节知识点总结)
java·数据结构·算法·leetcode·力扣
wanzehongsheng2 小时前
零碳产业园光伏园区光伏电站追踪对比固定:发电增益技术边界分析
算法·光伏发电·光伏·零碳园区·太阳能追光·低碳环保·追踪电站
KobeSacre2 小时前
CyclicBarrier 源码
java·jvm·算法
手写码匠2 小时前
注意力机制全家桶:从 Multi-Head 到 GQA 再到 Flash Attention 的手写实现
人工智能·深度学习·算法·aigc
大鱼>2 小时前
模型公平性与偏差检测:AI伦理实战指南
人工智能·深度学习·算法·机器学习
学究天人3 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷3.2)
线性代数·算法·机器学习·数学建模·动态规划·抽象代数·拓扑学
tkevinjd3 小时前
力扣322-零钱兑换
算法·leetcode·动态规划