## 665. Non-decreasing Array

Given an array `nums` with `n` integers, your task is to check if it could become non-decreasing by modifying at most one element.

We define an array is non-decreasing if `nums[i] <= nums[i + 1]` holds for every `i` (0-based) such that (`0 <= i <= n - 2`).

Example 1:

```Input: nums = [4,2,3]
Output: true
Explanation: You could modify the first `4` to `1` to get a non-decreasing array.
```

Example 2:

```Input: nums = [4,2,1]
Output: false
Explanation: You can't get a non-decreasing array by modify at most one element.
```

Constraints:

• `n == nums.length`
• `1 <= n <= 104`
• `-105 <= nums[i] <= 105`

## Rust Solution

``````struct Solution;

impl Solution {
fn check_possibility(nums: Vec<i32>) -> bool {
let n = nums.len();
if n < 2 {
return true;
}
let mut p: Option<usize> = None;
for i in 0..n - 1 {
if nums[i] > nums[i + 1] {
if p.is_some() {
return false;
} else {
p = Some(i);
}
}
}
if let Some(p) = p {
if p != 0 && p != n - 2 {
if nums[p - 1] >= nums[p + 1] && nums[p] >= nums[p + 2] {
return false;
}
}
}

true
}
}

#[test]
fn test() {
assert_eq!(Solution::check_possibility(vec![4, 2, 3]), true);
assert_eq!(Solution::check_possibility(vec![4, 2, 1]), false);
}
``````

Having problems with this solution? Click here to submit an issue on github.