算法1
分析:遍历数组,如果当前值大于下一个值则调整数值,具体调整规则如下:
若i == 0
则nums[i] = nums[i + 1]
;
否则,若nums[i - 1] <=nums[i + 1]
,则nums[i] = nums[i + 1]
;
否则,若nums[i - 1]> nums[i + 1]
,则nums[i + 1] = nums[i]
;
记录调整次数cnt
,若cnt <=1
返回true
否则false
.
时间复杂度 $O(n)$
C++ 代码
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int cnt = 0;
for(int i = 0;i < nums.size() - 1;++i){
if(nums[i] > nums[i + 1]){
if(!i){
nums[i] = nums[i + 1];
cnt ++;
}
else if(nums[i - 1] <= nums[i + 1]){
nums[i] = nums[i + 1];
cnt++;
}
else if(nums[i - 1]> nums[i + 1]){
nums[i + 1] = nums[i];
cnt++;
}
}
}
return cnt <= 1;
}
};