給你一個長度為 n 的整數數組,請你判斷在 最多 改變 1 個元素的情況下,該數組能否變成一個非遞減數列。
我們是這樣定義一個非遞減數列的: 對于數組中所有的 i (0 <= i <= n-2),總滿足 nums[i] <= nums[i + 1]。
示例 1:
輸入: nums = [4,2,3]
輸出: true
解釋: 你可以通過把第一個4變成1來使得它成為一個非遞減數列
貪心的思路在于讓前面子數組的結尾元素盡量少,那么后面元素可以滿足非遞減的情況的可能性越大
代碼
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])//當出現遞減時{if(++cnt>1) return false;//不滿足的位置加一if(i>0&&nums[i+1]<nums[i-1])
//num[i-1] nums[i] nums[i+1]
//當出現遞減時,有兩種改變元素的方法,分別是 nums[i+1]=nums[i] 或者 nums[i]=nums[i-1]
//當nums[i+1]<nums[i-1],只能將元素變為 nums[i-1] nums[i] nums[i]
//當nums[i+1]>=nums[i-1],就將元素變為 nums[i-1] nums[i-1] nums[i+1]
//上面的兩種序列根據 已知條件 nums[i-1]<=nums[i] 可以證明均滿足非遞減nums[i+1]=nums[i];}}return true;}
}