遍历数组,先去查找是否存在 nums[i] > nums[i + 1],如果有的话记录下来+1,在此基础上还要进行二次判断(比如3 4 2 3,如果只记录nums[i] > nums[i + 1]的个数的话只有一个,但是事实上这个数组不满足改变一个数字就变成非递减数组),二次判断的条件是,这四个数字中,第一个数字要小于第三个数字,第二个数字要小于第四个数字,即nums[i-1]<nums[i+1]并且nums[i]<nums[i+2](要排除i=0和i=nums.size()-2的情况),如果不满足这个二次判断的直接返回 false。满足这两个条件的个数小于2返回true, 否则返回false。
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int temp=0;
int index=0;
int n=nums.size();
while(index<n-1){
if(nums[index]>nums[index+1]){
if((index>0)&&(index<n-2)&&(nums[index-1]>nums[index+1])&&(nums[index]>nums[index+2])){
return false;
}
temp++;
}
if(temp>1){
return false;
}
index++;
}
return true;
}
};