题目描述:
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).
Note: The n belongs to [1, 10,000].
解题思路:
题目给出一组int类型的数组,找出是否最多改变其中一个元素,使得此数组单调非递减。
可以先设一个标注flag,表示是否已经修改过元素。
从第二个元素开始,如果第二个元素小于第一个元素,即将第一个元素修改成第二个元素;
对于之后每一个元素,如果比前一个元素的值小,则先判断是否存在下一个元素。
如果不存在下一个元素,则前面两个元素有多种改法,使得修改后满足非递减;
如果存在下一个元素,则比较下一个元素与第一个元素的大小;
- 第三个 < 第一个,修改第三个元素的值为第一个;
- 第三个 > 第一个,修改第二个元素的值为第三个元素;
每次修改后都将标志flag改为true;
若再次发现下一个元素比上一个元素小,且flag == true,即不满足题目要求。
代码:
class Solution {
public boolean checkPossibility(int[] nums) {
boolean flag = false;
if(nums.length == 0 || nums.length ==1){
return true;
}
for (int i = 1;i<nums.length;i++){
if(nums[i]<nums[i-1]){
if(flag)
return false;
if(i<2)
nums[i-1]=nums[i];
else{
if(nums[i]<nums[i-2])
nums[i]=nums[i-1];
if(nums[i]>=nums[i-2])
nums[i-1]=nums[i];
}
flag = true;
}
}
return true;
}
}