心路历程:
本以为这道题要用动态规划求解,因为题目中这几个关键字与动态规划太匹配了,结果想了半天也没发现dp(i)和dp(i-1)的递推关系。
这道题本意考察双指针的做法,也可以用排序后做比较的方式来做。
注意的点:
1、书写while循环时统一用大于小于号,如果到头退出循环的条件就是等于;如果中间break的话就是满足中间条件
2、注意区间长度比索引差大1
解法:排序+双指针
class Solution:
def findUnsortedSubarray(self, nums: List[int]) -> int:
# 动态规划做不了!
new = sorted(nums)
if new == nums: return 0
n = len(nums)
l, r = 0, n - 1
while l < n:
if nums[l] != new[l]:
break # 已经break了不需要再去-1,并且保证了一定从break退出循环
l += 1
while r > -1:
if nums[r] != new[r]:
break
r -= 1
return r - l + 1