leetcode 581. 最短無序連續子陣列【陣列】【Easy】
阿新 • • 發佈:2018-11-10
題目:
給定一個整數陣列,你需要尋找一個連續的子陣列,如果對這個子陣列進行升序排序,那麼整個陣列都會變為升序排序。
你找到的子陣列應是最短的,請輸出它的長度。
示例 1:
輸入: [2, 6, 4, 8, 10, 9, 15] 輸出: 5 解釋: 你只需要對 [6, 4, 8, 10, 9] 進行升序排序,那麼整個表都會變為升序排序。
說明 :
- 輸入的陣列長度範圍在 [1, 10,000]。
- 輸入的陣列可能包含重複元素 ,所以升序的意思是<=。
思路:
先將原陣列排序後存放在另一個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