题目描述
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
你找到的子数组应是最短的,请输出它的长度。
算法
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)