665. 非遞減數列
阿新 • • 發佈:2020-07-19
給你一個長度為n的整數陣列,請你判斷在 最多 改變1 個元素的情況下,該陣列能否變成一個非遞減數列。
我們是這樣定義一個非遞減數列的:對於陣列中所有的i (0 <= i <= n-2),總滿足 nums[i] <= nums[i + 1]。
示例 1:
輸入: nums = [4,2,3] 輸出: true 解釋: 你可以通過把第一個4變成1來使得它成為一個非遞減數列。
示例 2:
輸入: nums = [4,2,3] 輸出: true 解釋: 你可以通過把第一個4變成1來使得它成為一個非遞減數列。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/non-decreasing-array
思路:
在出現 nums[i] < nums[i - 1] 時,需要考慮的是應該修改陣列的哪個數,使得本次修改能使 i 之前的陣列成為非遞減陣列,並且不影響後續的操作。優先考慮令 nums[i - 1] = nums[i],因為如果修改 nums[i] = nums[i - 1] 的話,那麼 nums[i] 這個數會變大,就有可能比 nums[i + 1] 大,從而影響了後續操作。還有一個比較特別的情況就是 nums[i] < nums[i - 2],修改 nums[i - 1] = nums[i] 不能使陣列成為非遞減陣列,只能修改 nums[i] = nums[i - 1]。
class Solution { public boolean checkPossibility(int[] nums) { int cnt = 0; for (int i = 1; i < nums.length && cnt < 2; i++) { if (nums[i] >= nums[i - 1]) { continue; } cnt++; if (i - 2 >= 0 && nums[i - 2] > nums[i]) { nums[i]= nums[i - 1]; } else { nums[i - 1] = nums[i]; } } return cnt <= 1; } }