665 非遞減數列

2021-10-19 07:33:22 字數 1471 閱讀 3557

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

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

示例 1:

輸入: nums = [4,2,3]

輸出: true

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

示例 2:

輸入: nums = [4,2,1]

輸出: false

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

題解:這道題一不小心就掉坑里出不來了,我們直接看兩個例子。

例一1,4,2,3

1,4,2,3

我們發現 4 比 2 大,那麼把 4 替換成 2,變成 1,2,2,3 就好了

但是如果把 2 替換成 4,變成 1,4,4,3 是不可以的

例二5,7,1,8

5,7,1,8

我們發現 7 比 1 大,那麼把 1 替換成 7 變成 5, 7, 7, 8 就好了

但是如果把 7 替換成 1,變成 5,1,1,8 是不可以的

於是,對於 nums[i] > nums[i+1], 在第乙個例子裡我們修改的是前乙個數,第二個例子裡我們修改的是後乙個數。

看出什麼了沒有?

如果發現 nums[i] > nums[i+1],我們一定是通過修改其中乙個元素,讓 nums[0] 到 nums[i+1] 滿足非遞減數列,且不干擾到後面的大小關係。而不是拆了東牆補西牆,就像 1,4,2,3 變成 1,4,4,3 這樣。

所以我們的策略是:

能修改 nums[i],就絕不修改 nums[i+1]

class

solution

:def

checkpossibility

(self, nums: list[

int])-

>

bool

: changed =

false

for i in

range

(len

(nums)-1

):if nums[i]

> nums[i+1]

:if changed:

return

false

changed =

true

# 修改num[i]會導致nums[i-1] > nums[i]

if i >

0and nums[i-1]

> nums[i+1]

: nums[i+1]

= nums[i]

else

:#能修改i絕不修改i+1

nums[i]

= nums[i+1]

return

true

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來使得它...

665 非遞減數列

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