題目:給你一個長度爲 n 的整數數組,請你判斷在 最多 改變 1 個元素的情況下,該數組能否變成一個非遞減數列。
我們是這樣定義一個非遞減數列的: 對於數組中所有的 i (1 <= i < n),總滿足 array[i] <= array[i + 1]。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/non-decreasing-array
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
思路:遇到前大於後,縮小前者同時保存前者下標以及值並退出循環,從頭再開始;再次遇到前大於後,利用之前保存的值放大第一次比較時的後者值與第一次比較時的前者一致並退出循環,再次從頭開始比較,當再次遇到前大於後時退出循環輸出false。
代碼:
bool checkPossibility(int* nums, int numsSize){
int temp=0,flag=0;
for(int i=0;i<numsSize-1;i++){
if(nums[i]>nums[i+1]){
temp = nums[i];
nums[i]=nums[i+1];
flag = i;
break;
}
}
for(int i=0;i<numsSize-1;i++){
if(nums[i]>nums[i+1]){
nums[flag] = nums[flag+1] = temp;
break;
}
}
for(int i=0;i<numsSize-1;i++){
if(nums[i]>nums[i+1])
return false;
}
return true;
}