题目:
Given an array with n
integers, your task is to check if it could become non-decreasing
by modifying at most 1
element.
We define an array is non-decreasing if array[i] <= array[i + 1]
holds for every i
(1
<= i < n).
Example 1:
Input: [4,2,3] Output: True Explanation: You could modify the first4
to1
to get a non-decreasing array.
Example 2:
Input: [4,2,1] Output: False Explanation: You can't get a non-decreasing array by modify at most one element.
Note: The n
belongs to [1, 10,000].
思路:
我们nums[i]和其之前的数字nums[i - 1],如果nums[i] < nums[i - 1],那么有两种情况:1)如果nums[i - 2] <= nums[i],那么说明nums[i - 1]是最大的,我们只需要将其删除就可以消除当前的递减情况(在实现中,我们通过修改nums[i - 1]的值来实现);2)如果nums[i - 2] > nums[i],那么nums[i]是最小的,我们需要删除掉nums[i]才有可能消除递减情况(在实现中我们通过修改nums[i]的值来实现)。
代码:
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int count = 0;
for (int i = 1; i < nums.size() && count <= 1; ++i) {
if (nums[i] < nums[i - 1]) { // nums[i - 1] is larger
++count;
if (i < 2 || nums[i - 2] <= nums[i]) {
nums[i - 1] = nums[i]; // we want to delete nums[i - 1]
}
else { // i >= 2 && nums[i - 2] > nums[i]
nums[i] = nums[i - 1]; // we want to delete nums[i]
}
}
}
return count <= 1;
}
};