> Problem: [665. 非递减数列]
[TOC]
# 思路
> 这个题确实不简单,这个题看似很简单,但是如果没动脑筋确实不能通过全部测试用例
# 解题方法
> 怎么说呢,每次遍历,看其中连续的三个数字,从左到右记为x.y,z
第一种情况 y>z,z>=x 则令y = x
第二种情况y>z,z<x 则令z = y
第三种情况 x > y , y <= z 则令 x = y;
就这三种情况进行编写程序,需要多次在纸上模拟多种情况才能进行解答
# 复杂度
- 时间复杂度:
> 添加时间复杂度, 示例: $O(n)$
- 空间复杂度:
> 添加空间复杂度, 示例: $O(n)$
# Code
```Java []
class Solution {
public boolean checkPossibility(int[] nums) {
if (nums.length == 0 || nums.length == 1)
return true;
int count = 0;
for (int i = 1; i < nums.length-1; i++) {
if (count > 1){
break;
}
if (nums[i] > nums[i+1]){
if (nums[i+1] >= nums[i-1]){
nums[i] = nums[i-1];
count++;
}else{
nums[i+1] = nums[i];
count++;
}
}
if (nums[i-1]>nums[i] && nums[i] <= nums[i+1]){
nums[i-1] = nums[i];
count++;
}
}
return count <=1;
}
}
```
本文介绍了如何解决非递减数列的问题,解析了三种关键情况:当相邻元素出现逆序时,根据前后关系进行调整。通过遍历数组并更新元素,确保最多只修改一个元素以满足非递减条件。代码使用Java实现,时间复杂度和空间复杂度均为$O(n)$。
353

被折叠的 条评论
为什么被折叠?



