1. 程式人生 > >leetcode 581. 最短無序連續子陣列【陣列】【Easy】

leetcode 581. 最短無序連續子陣列【陣列】【Easy】

題目:       

給定一個整數陣列,你需要尋找一個連續的子陣列,如果對這個子陣列進行升序排序,那麼整個陣列都會變為升序排序。

你找到的子陣列應是最短的,請輸出它的長度。

示例 1:

輸入: [2, 6, 4, 8, 10, 9, 15]
輸出: 5
解釋: 你只需要對 [6, 4, 8, 10, 9] 進行升序排序,那麼整個表都會變為升序排序。

說明 :

  1. 輸入的陣列長度範圍在 [1, 10,000]。
  2. 輸入的陣列可能包含重複元素 ,所以升序的意思是<=。

思路:

         先將原陣列排序後存放在另一個list集合中。從前至後和從後至前依次遍歷整個陣列,判斷原陣列的當前位與排好序陣列的當前位是否一致。記錄前面和後面的不一致的其實索引值。兩個索引值中間的數的個數即為要排序的數個數。

程式碼:

class Solution:
    def findUnsortedSubarray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums_sort = nums[:]
        nums_sort.sort()
        n = len(nums)
        i,j = 0,n-1
        while i<n and nums[i] == nums_sort[i]:
            i+=1
            
        while j>i+1 and nums[j] == nums_sort[j]:
            j-=1
        return j-i+1