【力扣-每日小练】581. 最短无序连续子数组(python)

581. 最短无序连续子数组

题目链接:https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/
难度:简单
标签:数组(array)

题目描述

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

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

测试示例

示例 1:
输入: [2, 6, 4, 8, 10, 9, 15]
输出: 5
解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。

说明 :

  • 输入的数组长度范围在 [1, 10,000]。
  • 输入的数组可能包含重复元素 ,所以升序的意思是<=。

代码样例

思路:

  • 首先拷贝一份,将其进行排序
  • 将排序后的这份与原列表进行对比,记录下相同值的索引,
class Solution:
    def findUnsortedSubarray(self, nums: List[int]) -> int:
        if len(nums)==1:
            return 0
        nums_copy = nums[:]
        nums_copy.sort()
        start, end  = -1, len(nums)
        flag_start, flag_end = True, True
        for i in range(len(nums)):
            if nums[i] == nums_copy[i] and flag_start == True:
                start = i
            else:
                flag_start = False
            if nums[-i-1] == nums_copy[-i-1] and flag_end == True:
                end = len(nums) - i -1
            else:
                flag_end =False
            if end <= start:
                return 0
        return end - start - 1

【力扣-每日小练】581. 最短无序连续子数组(python)_第1张图片

你可能感兴趣的:(力扣练习-简单)