#直接排序比较,这真是我没想到的
#之前的心路历程是,先找第一个变化的点,在这点之后子数组进行一次类似判断,是否需要改变
#相当于把数组一个个缩小成子数组,然后遍历判断
#当然这是很麻烦的,而且复杂度很高
#然后去看解析,好家伙,聪明如此
#于是从善如流,就用这个排序比较了
class Solution:
def findUnsortedSubarray(self , nums: List[int]) -> int:
# write code here
n = len(nums)
temp = []
for i in range(n):
temp.append(nums[i]) #这是不用函数的复制,就相当于不用调包
temp = sorted(temp)
#值得一提的是,用sorted是不会改变nums,而用.sort()会改变nums
start,end = -1,-1
#这是判断的标签,如果本身是有序的,就在之后判断返回0
for i in range(n):
if temp[i] != nums[i]:
start = i
break
#这个break也很重要,不然他会找到后面第二个不同的点
for j in range(n-1,0,-1):
if temp[j] != nums[j]:
end = j
break
if start == -1 and end == -1:
return 0
else:
return end - start +1
#长度是+1的,这个第二重要