【力扣日记】581 最短无序连续子数组

题目描述

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

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

算法

class Solution:
    def findUnsortedSubarray(self, nums: List[int]) -> int:
        l,r=0,len(nums)-1
        if r==0:return 0
        ls=sorted(nums)
        while l<=r:
            if nums[l]!=ls[l] and nums[r]!=ls[r]:break
            if nums[l]==ls[l]:l+=1
            if nums[r]==ls[r]:r-=1
        print(l,r)
        return 0 if r-l+1==-1 else r-l+1

算法其实很简单,就是双指针,然后排序数组间对比。

这里只需要注意一点,对任何数组,最少要有两个相连的元素是不符合条件的,此时return r-l+1

除此的特殊条件就是给定数组已经是排序数组了,那么根据数组长度是奇或偶,结果可能是0或-1
说着,return可以修改为 return max(r-l+1,0)

发布了210 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/104826814