版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hh66__66hh/article/details/82712056
#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.
##思路
主要思路是,用ans来表示修改的次数,初始为0。 i从0到n-2,如果发现有array[i] > array[i + 1] (1 <= i < n),则分以下情况处理:
(1)如果ans大于0,说明已经改了一个数,此时返回false;
(2)如果ans等于0,则ans++,然后分以下情况处理:
1)i==0,此时只需将array[0]改为array[1]的值即可(往小的改);
2)i>0,此时比较array[i+1]和array[i-1]:
如果array[i+1] > array[i-1],则将array[i]改为array[i-1]或array[i+1];
如果array[i+1] < array[i-1],则将array[i+1]改为array[i]。
只要出现了两次或以上的array[i] > array[i + 1] (1 <= i < n),就肯定不行,但只是这样还不行,还要判断特殊情况,例如数组[2,3,3,2,4],
##代码
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int ans = 0;
int i, j, k;
if(nums.size() < 3) {
return true;
}
for(i=0; i<nums.size()-1; i++) {
if(nums[i] > nums[i+1]) {
if(ans>0) {
return false;
}
ans ++;
if(i>0 && nums[i+1] < nums[i-1]){
nums[i+1] = nums[i];
}
}
}
return true;
}
};