演算法 簡單 665 非遞減數列

2021-09-29 23:54:38 字數 2283 閱讀 7457

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

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

示例1:

輸入

: [4,2,3]

輸出: true

解釋: 你可以通過把第乙個4變成1來使得它成為乙個非遞減數列。

示例2:

輸入

: [4,2,1]

輸出: false

解釋: 你不能在只改變乙個元素的情況下將其變為非遞減數列。

說明:n的範圍為[1,10000]

題目理解:只能動乙個數字,將數列調整成非遞減數列,非遞減就是前乙個不能大於後乙個大,換句話說,後乙個大於等於前乙個

知識點:陣列

1. 如果陣列長度小於3,返回true

2. 查詢逆序對:如果超過2個,返回false

3. 如果只有1個,則需要考慮修改哪個數:num[index]還是 num[index+1]

3.1 修改num[index]

,修改後的條件為:num[index-1]

<= num[index]

<= num[index+1]

,也就是說修改的數要在兩者之間進行取值。

區間存在的前題條件是*nums[index-1]

< nums[index+1]

*eg:[3,

2,4,

5]中將2改為3

,即:[3,

3,4,

5]3.2 修改num[index+1]

,修改後的條件為:num[index]

<= num[index+1]

<= num[index+2]

區間存在的前題條件是*nums[index]

< nums[index+2]

*eg:[3,

4,2,

5]中將2改為4

,即:[3,

4,4,

5]綜3.1和3.2所述,如果要修改只有乙個逆序對的陣列,必須要滿足這兩個前提條件之一。

換句話說,如果這兩個條件都不滿足,也就意味著修改乙個數不可能使整個陣列變成非逆序。

python3

class solution

: def checkpossibility

(self, nums: list[int])-

> bool:

length =

len(nums)

if length <3:

return true

count =

0 # 逆序次數

for index in

range

(length -1)

:if nums[index]

<= nums[index+1]

:continue

if count >

0: # 有至少兩個地方出現遞減時,不可能使整個序列非遞減

return false

count +

=1 # 標記已經出現遞減,已經使用了修改乙個元素的機會

# index為0,則修改nums[

0]即可;

# index為length-

2, 修改nums[length-

1]即可;

# index不為0, length-

2時, index-

1, index, index+

1, index+

2不會越界

# nums[index]

<= nums[index+

2],可以修改nums[index+1];

# nums[index-1]

<= nums[index+

1], 可以修改nums[index]

if index in(0

, length -

2) or nums[index]

<= nums[index+

2] or nums[index-1]

<= nums[index+1]

:continue

return false

return true

665 非遞減數列 簡單

題目 於力扣 leetcode 目錄665.非遞減數列 說明 因可以改變一次陣列元素的值,那麼定義乙個變數用來記錄改變元素的次數,大於 1 次時即返回 false遍歷陣列,判斷當前遍歷元素是否小於前乙個元素 小於前乙個元素時,還需要判斷是否小於前二個元素 如果小於前乙個且小於前二個元素時,那麼只能將...

665 非遞減數列

思路 遍歷整個陣列,如果遇到nums i nums i 1 的情況,則要麼修改nums i 要麼修改nums i 1 若修改一次就能成功,則去掉nums i 或者num i 1 剩下的陣列必然是非遞減的。class solution def checkpossibility self,nums ty...

665 非遞減數列

給定乙個長度為 n 的整數陣列,你的任務是判斷在最多改變 1 個元素的情況下,該陣列能否變成乙個非遞減數列。我們是這樣定義乙個非遞減數列的 對於陣列中所有的 i 1 i n 滿足 array i array i 1 示例 1 輸入 4,2,3 輸出 true 解釋 你可以通過把第乙個4變成1來使得它...