解题思路:遍历数组,如果发现nums[i]>nums[i+1],则出现一次异常数据,此时分两种情况:当nums[i+1]>=nums[i-1]时,说明nums[i+1]大于或等于nums[i]前面的数,所以可以将nums[i+1]的值赋给nums[i];当nums[i+1]<nums[i-1]时,只能把nums[i]赋给nums[i+1]。如果出现第二个异常数据,则直接返回false,否则返回true。
class Solution {
public:bool checkPossibility(vector<int>& nums) {
int found=0;
for(int i=0;i<nums.size()-1;i++){
if(nums[i]>nums[i+1]){
found++;
if(i==0)
nums[i]=nums[i+1];
else if(nums[i+1]<nums[i-1])
nums[i+1]=nums[i];
else if(nums[i+1]>=nums[i-1])
nums[i]=nums[i+1];
}
if(found==2)
return false;
}
return true;
}
};