自学内容网 自学内容网

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

在这里插入图片描述

心路历程:

本以为这道题要用动态规划求解,因为题目中这几个关键字与动态规划太匹配了,结果想了半天也没发现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 

原文地址:https://blog.csdn.net/weixin_43483381/article/details/137482767

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!