### 题目

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].

### 基本是个数学问题

        .
4   .
3

.
-1


        .
4   .
3   .
2
.
-1


            .
4

.
0
.
.           .  -1
-2          -2
---------------------------
^
第一次递减


##### 第一种：可以保留当前点，抹掉前置点

            .           ^
4           | 下一个点必须 >= 1（可以把4换成[0,1]之间的一个数）
|
.--------
.        1
0

.
-2
---------------------------
^
第一次递减

##### 第二种：无法保留当前点，必须删掉当前点

            .-------------- 下一个点必须 >= 4（必须把-1改成 >= 4 的数字）
4

.
0
.
.           -1
-2
----------------------------
^
第一次递减


#### 代码

class Solution {
public boolean checkPossibility(int[] nums) {
boolean decreased = false;
int min = Integer.MIN_VALUE;
for (int i = 1; i < nums.length; i++) {
if (nums[i] < min) return false;
if (decreased) min = nums[i];
if (nums[i] < nums[i - 1]) {
decreased = true;
if (i == 1 || (i > 1 && nums[i] >= nums[i - 2])) {
min = nums[i];
} else {
min = nums[i - 1];
}
}
}
return true;
}
}