LeetCode 665. 非遞減數列(Python)

給定一個長度爲 n 的整數數組,你的任務是判斷在最多改變 1 個元素的情況下,該數組能否變成一個非遞減數列。

我們是這樣定義一個非遞減數列的: 對於數組中所有的 i (1 <= i < n),滿足 array[i] <= array[i + 1]。

示例 1:

輸入: [4,2,3]
輸出: True
解釋: 你可以通過把第一個4變成1來使得它成爲一個非遞減數列。


示例 2:

輸入: [4,2,1]
輸出: False

思路:先遍歷一遍列表,找出第一個不滿足的位置進行修改,當前位置i,則修改規則爲:

  • 如果i-1 > i+1,則i+1處的值太小,設置爲i處相同
  • 如果i-1 < i+1,則i處的值太大,設置爲i+1處相同

之後再判斷列表是否是非遞減的。

class Solution(object):
    def checkPossibility(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        # 調整一次
        for i in range(len(nums)-1):
            if nums[i] > nums[i+1]:
                if i == 0:
                    nums[i] = nums[i+1]
                elif nums[i-1] > nums[i+1]: # i處後一位數太小了,加大
                    nums[i+1] = nums[i]
                else:
                    nums[i] = nums[i+1]    # i處太大了,變小
                break
        
        # 調整後再判斷
        for i in range(len(nums)-1):
            if nums[i] > nums[i+1]:
                return False
            
        return True
        
        

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章