算法练习——非递减数列

2021年2月7日LeetCode每日一题665. 非递减数列,开局就是一顿判断,出现递减的次数超过了1就直接返回false是不正确的,在判断两两有序的时候,如果出现[3, 4, 2, 3]这种情况是不能单改变一个元素变成非递减数列的,也就不能满足题设要求了,因此在第i+1个元素小于第i个元素的时候,还需要判断第i+1个元素是否小于第i-1个元素,小于的话将第i+1个元素改变为第i个元素,使得后续的数字能够正确判断是否同为递减,再次递减则不满足题设。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public boolean checkPossibility(int[] nums) {
int count = 0;
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] > nums[i + 1]) {
count++;
if (count > 1) {
return false;
}
if (i > 0 && nums[i + 1] < nums[i - 1]) {
nums[i + 1] = nums[i];
}
}
}
return true;
}
}