Question
Given an array
nums
withn
integers, your task is to check if it could become non-decreasing by modifying at most one element.We define an array is non-decreasing if
nums[i] <= nums[i + 1]
holds for everyi
(0-based) such that (0 <= i <= n - 2
).
Solution 1
记录两个最大值last1和last2,初始化为整数最小值。真值flag初始化为true用来记录是否已经有非单调递增的值出现。
遍历数组,如果当前数字num大于等于last2,则符合单调递增,更新last1和last2。
如果num小于last2,则不符合单调递增,此时将flag置为false。
- 如果num大于等于last1,则跳过现有的last2,将num保存在last2上。
- 如果num小于,则保留当前的last2
如果flag已经为false,则非单调递增的数字超过1个,返回false。
遍历完毕则返回true。
Code
1 | class Solution { |
Solution 2
原理和Solution 1相同,只不过采用单调栈的形式保存单调递增数字。
Code
1 | class Solution { |