文章目录
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ff364c0c4f6413b928b7d9b7bb15193f.png)
解题思路:时间复杂度O(
n
n
n),空间复杂度O(
1
1
1) |
---|
- 如果两个相邻的数x和y不满足nums[i] <= nums[i+1],则需要修改一次
- 如果这样的修改进行两次,则返回false
- 特殊情况:我们现在的y是下一次的x。所以如果y是需要本次修改的值,则我们需要对其进行操作
如果当前i位置的x不在开头,也就是i前面还有元素 i - 1的话(记为pre)
则状况为 pre <= x > y 例如 3 <= 4 > 2. 无法构成升序
如果y 比 pre 小,就令y = x 这样就依然满足升序,变为pre <= x = y. 也就是 3 <= 4 = 4
但是如果y > = pre 例如 3 5 4 或者 3 5 3. 那么不需要修改y 而是修改x 为 3. 也就是 3 3 4 或 3 3 3
但是下一次的x就是现在的y,所以这一步对x的修改,没什么用,可以省略
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1f5103f23520aa94c24d75eab41ccbaf.png)
class Solution {
public boolean checkPossibility(int[] nums) {
int n = nums.length,current = 0;
for(int i = 0;i < n-1;i++){
int x = nums[i], y = nums[i+1];
if(x > y) {
current++;
if(current > 1) return false;
if(i > 0 && y < nums[i-1]) nums[i+1] = x;
}
}
return true;
}
}