class Solution {
public:
bool checkPossibility(vector<int>& nums) {
if(nums.empty()||nums.size()<=2) return true;
int num=0;
bool flag=true;
for(int i=0;i<nums.size()-1;i++){
if(nums[i]>nums[i+1]) {
num+=1;
if(i>0 && nums[i-1]>nums[i+1] && i+2<nums.size() && nums[i]>nums[i+2]){
flag =false;
}
}
}
return (num<=1) && flag;
}
};
首先,如果前面大于后面的逆序对大于1个,肯定不行,然后再针对逆序对为1个时,排除掉修改前面和后面两个数均会导致出现新的逆序对的情况即可。