leetcode-non-decreasing-array

题目大意

  https://leetcode.com/problems/non-decreasing-array/

  数组中至多修改一个元素的值,问能不能变成非递减数组

题目分析

  思路参考了 https://discuss.leetcode.com/topic/101144/java-c-simple-greedy-like-solution-with-explanation

  有点贪心的思路,每次遇到i,可以判断i是否比i+1处的值大,如果大说明违反了“非递减”,cnt加1,同时需要修改值,使得nums[i]nums[i+1]变成相同值,至于变成谁的值,还需进一步比较num[i-1]nums[i+1],具体边界控制可以看下代码。

代码

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

  时间复杂度:O(n)