題目要求
給定一個序列,改動其中的數(shù)字,能夠構成非遞減序列所更改次數(shù)少于2的函數(shù)返回真,否則返回假。
思路
首先考慮數(shù)組數(shù)量少于等于2的時候一定可以構成非遞減序列
當大于等于3時需要,遇到當前的值大于后面的一個值說明這時候需要進行修改,修改有兩種情況,將當前的值設置成前面的值,或者是設置成后面的值。
1.設置成前面的值
后面的值大于前面值的時候,設置當前的值為前面的值可以保證非遞減序列。
2.設置成后面的值
后面的值小于前面值的時候,設置當前的值為后面的值可以保證非遞減序列。
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int sum = 0;
if(nums.size()<=2) return true;
if(nums[0]>nums[1])
{
sum++;
nums[0] = nums[1];
}
for(int i = 1;i<nums.size()-1;i++)
{
// 如果大了必然得改
if(nums[i]>nums[i+1])
{
if(nums[i+1]>nums[i-1])
{
nums[i] = nums[i-1];
}
if(nums[i+1]<nums[i-1])
{
nums[i+1] = nums[i];
}
sum++;
}
}
if(sum>1)
{
return false;
}
return true;
}
};