题目描述:
给一个长度为n 的整数数组
请你判断在最多改变一个元素的情况下,该数组能否变成一个非递减数列,即升序数列
递减数列是这样定义的:对于数组中任意的i(0<= i <= n-2) 总满足nums[i] <= nums[i+1]
如:
2 2 3 返回true
4 2 1 返回false
题目解析:
思路:
利用差值为1的双指针,如果前面小于后面,继续相互迭代,否则修改一次值,至于修改arr[i]还是修改arr[jde 值,需要根据前后数值大小判断,且只能修改一次,当出现修改第二次时,直接返回false。整个循环没有退出,循环结束返回true。
bool CheckPossibility(int *arr,int len)
{
int j = 0;
int count = 0;
for(int i = 1;i<len;++i)
{
if(arr[j] > arr[i])
{
if(++count > 1)
{
return false;
}
if(j-1 >=0 && arr[i] < arr[j-1])
{
arr[i] = arr[j];
}
else
{
arr[j] = arr[i];
}
++j;
}
else
{
++j;
}
}
return true;
}