【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;
    }
}
相关推荐
Tisfy3 分钟前
LeetCode 960.删列造序 III:动态规划(最长递增子序列)
算法·leetcode·动态规划·字符串·题解·逆向思维
多米Domi0115 分钟前
0x3f第十天复习(考研日2)(9.18-12.30,14.00-15.00)
python·算法·leetcode
listhi5209 分钟前
支持向量机多分类解决方案
算法·支持向量机·分类
十三画者10 分钟前
【文献分享】vConTACT3机器学习能够实现可扩展且系统的病毒分类体系的构建
人工智能·算法·机器学习·数据挖掘·数据分析
TrueFurina(互关互赞)23 分钟前
7-4 区间水仙花数 Python程序设计-MJU实验四(编程入门•多代码实现•测试均通过)
数据结构·算法·飞书·创业创新·学习方法·远程工作·改行学it
Amnesia0_024 分钟前
Map和Set
算法
受伤的僵尸25 分钟前
算法类复习(1)-非自注意力机制(图像处理中的注意力)
人工智能·算法
_w_z_j_28 分钟前
最小高度树
算法
2301_7890156231 分钟前
每日精讲:环形链表、两个数组中的交集、随机链表的复制
c语言·数据结构·c++·算法·leetcode·链表·排序算法
CodeByV35 分钟前
【算法题】滑动窗口 (二)
算法