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

题目描述

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

你找到的子数组应是最短的,请输出它的长度。

示例 1:

输入: [2, 6, 4, 8, 10, 9, 15]

输出: 5

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

解法

以 left、right、maxIndex 分别作为待求子数组的左边界、右边界和最大值。由左向右遍历数组,并更新最大值下标。若当前元素小于最大值,则更新右边界 right 值,并由 left 向左遍历,直到元素不大于右边界 right 指向值。最终子数组长度为 right - left + 1。

class Solution:
    def findUnsortedSubarray(self, nums: List[int]) -> int:
        left,right,maxIndex=None,0,0
        for i in range(1,len(nums)):
            if nums[i]>=nums[maxIndex]:
                maxIndex=i
            else:
                right=i
                if left==None:
                    left=i-1
                while left>0 and nums[left-1]>nums[right]:
                    left-=1
        return right-left+1 if left!=None else 0
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an 输...
    code武阅读 737评论 0 0
  • 内容 给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 ...
    吃饭用盘装阅读 723评论 0 1
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 2,585评论 0 1
  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 2,342评论 0 3
  • 瞄第一眼作文题目,我就寻思,我的5000微友里应该有“晨光补校”陈校长,找我百乡通打过招生广告,兴许找他复读能打个...
    骆桐阅读 555评论 1 0

友情链接更多精彩内容