好題 leetcode每日一題 665 非遞減數列

2021-10-19 07:37:31 字數 1145 閱讀 9229

題目:

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

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

思路:

讓改變 盡可能小地 減少對後續判斷的影響。當不能滿足非遞減條件時,最多只能改變陣列中的乙個數。在遍歷陣列時,按如下要求操作:

能改變nums[i-1],使數列nums[:i+1]滿足非遞減條件,就改變nums[i-1]。實在不行(即:nums[i](1) 5,2,7

(2)1,5,2,7

(3)4,5,2,7

nums[i]=2

在(1)(2)中,改變nums[i-1]即可滿足條件

在(3)中,只能改變nums[i]

解答:

class

solution

:def

checkpossibility

(self, nums: list[

int])-

>

bool

: n=

len(nums)

if n<3:

return

true

count=

0for i in

range(1

,n):

if nums[i]

: count+=

1if count>1:

return

false

if i==

1or nums[i]

>=nums[i-2]

: nums[i-1]

=nums[i]

else

: nums[i]

=nums[i-1]

return

true

每日一題 LeetCode

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...

LeetCode每日一題(題1028)

最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...

LeetCode每日一題(題139)

題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...