leetcode 665. 非递减数列(贪心算法)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 665. 非递减数列(贪心算法)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給你一個(gè)長(zhǎng)度為 n 的整數(shù)數(shù)組,請(qǐng)你判斷在 最多 改變 1 個(gè)元素的情況下,該數(shù)組能否變成一個(gè)非遞減數(shù)列。
我們是這樣定義一個(gè)非遞減數(shù)列的: 對(duì)于數(shù)組中所有的 i (0 <= i <= n-2),總滿足 nums[i] <= nums[i + 1]。
示例 1:
輸入: nums = [4,2,3]
輸出: true
解釋: 你可以通過(guò)把第一個(gè)4變成1來(lái)使得它成為一個(gè)非遞減數(shù)列
貪心的思路在于讓前面子數(shù)組的結(jié)尾元素盡量少,那么后面元素可以滿足非遞減的情況的可能性越大
代碼
class Solution {public boolean checkPossibility(int[] nums) {int n=nums.length,cnt=0;if(n==1) return true;for(int i=0;i<n-1;i++){if(nums[i+1]<nums[i])//當(dāng)出現(xiàn)遞減時(shí){if(++cnt>1) return false;//不滿足的位置加一if(i>0&&nums[i+1]<nums[i-1]) //num[i-1] nums[i] nums[i+1] //當(dāng)出現(xiàn)遞減時(shí),有兩種改變?cè)氐姆椒?#xff0c;分別是 nums[i+1]=nums[i] 或者 nums[i]=nums[i-1] //當(dāng)nums[i+1]<nums[i-1],只能將元素變?yōu)? nums[i-1] nums[i] nums[i] //當(dāng)nums[i+1]>=nums[i-1],就將元素變?yōu)? nums[i-1] nums[i-1] nums[i+1] //上面的兩種序列根據(jù) 已知條件 nums[i-1]<=nums[i] 可以證明均滿足非遞減nums[i+1]=nums[i];}}return true;} }總結(jié)
以上是生活随笔為你收集整理的leetcode 665. 非递减数列(贪心算法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spring—SpringMVC的请求和
- 下一篇: leetcode 978. 最长湍流子数