665. Non-decreasing Array
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 first 4 to 1 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].
Approach
- 题目大意就是最多修改数组中的一个元素使数组变为非递减数组。思路是分类讨论,当
nums[i-1]>nums[i]
时,我们只要判断nums[i]
与nums[i-2]
的关系即可,假如nums[i-2]>=nums[i]
,那么nums[i]=nums[i-1]
,因为nums[i-2]与nums[i-1]
已成递增序列,所以不能破坏,只能让nums[i]=nums[i-1]
,最大限度保证保持递增,同理nums[i-2]<nums[i]
,则nums[i-1]=nums[i]
。
Code
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int n = nums.size(), cnt = 0;
for (int i = 1; i < n&&cnt < 2; i++) {
if (nums[i - 1] > nums[i]) {
cnt++;
if (i - 2 < 0 || nums[i - 2] <= nums[i]) {
nums[i - 1] = nums[i];
}
else {
nums[i] = nums[i - 1];
}
}
}
return cnt <= 1;
}
};