給定乙個長度為 n 的整數陣列,判斷在最多改變 1 個元素的情況下,該陣列能否變成乙個非遞減數列。
非遞減數列的: 對於陣列中所有的 i (1 <= i < n),滿足 array[i] <= array[i + 1]。
輸入: [4,2,3]
輸出: true
解釋: 你可以通過把第乙個4變成1來使得它成為乙個非遞減數列。
輸入: [4,2,1]
輸出: false
解釋: 你不能在只改變乙個元素的情況下將其變為非遞減數列。
用count來記錄調整元素的次數,若大於1則返回false,否則返回true
遍歷陣列,發現不滿足array[i] <= array[i + 1]則調整陣列元素
重點在於如何調整元素
[a,b,c]
非遞減的話應當a<=b<=c
用指標i指向三個數中的中間的數,即b,且i之前的元素都滿足順序,即a<=b
如果c>b,則需要調整元素:
c<=a,則目前順序為c<=a<=b,故需要調整c,調整c=b
c>a,則目前順序為a<=b,a
class
solution
(object)
: def checkpossibility
(self, nums)
:"""
:type nums: list[int]
:rtype: bool
"""length =
len(nums)
if length<=2:
return true
count =
0 # 用於記錄調整順序的次數
# 保證第一第二個元素滿足順序
if nums[0]
>nums[1]
: nums[0]
= nums[1]
count +=
1for i in
range(1
,length-1)
:
# i之前的都滿足順序
# 第i個和第i+
1個元素不滿足順序
if nums[i]
>nums[i+1]
: count +=
1if count >1:
return false
# 調整第i或第i+
1個元素,使它們滿足順序
# 第i個大於第i+
1個,第i+
1個小於第i-
1個,則第i+
1個小,不滿足順序
if nums[i+1]
<=nums[i-1]
: nums[i+1]
= nums[i]
# 第i個大於第i+
1個,第i+
1個大於第i-
1個,則第i個不滿足順序
else
: nums[i]
=[i+1]
return true
力扣刷題記錄 陣列 簡單 896單調數列
如果陣列是單調遞增或單調遞減的,那麼它是單調的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞增的。如果對於所有 i j,a i a j 那麼陣列 a 是單調遞減的。當給定的陣列 a 是單調陣列時返回 true,否則返回 false。class solution object def ...
力扣刷題記錄 陣列 簡單 1 167兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,在該陣列中找出和為目標值的那兩個整數,並返回它們的陣列下標。假設每種輸入只會對應乙個答案,但是不能重複利用這個陣列中同樣的元素。給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9,所以返回 0,1...
力扣刷題記錄 陣列 簡單 605種花問題
給定乙個由0和1組成的陣列表示花壇,其中0表示沒種花,1表示植了花。要再向花壇中種n朵花,要求 相鄰花壇不能同時種花。能否在不打破種植規則的情況下種入 n 朵花。錯誤解答 class solution object def canplaceflowers self,flowerbed,n type ...