題目描述
給你一個長度為?n
?的整數數組?nums
?,請你判斷在?最多?改變?1
?個元素的情況下,該數組能否變成一個非遞減數列。
我們是這樣定義一個非遞減數列的:?對于數組中任意的?i
?(0 <= i <= n-2)
,總滿足?nums[i] <= nums[i + 1]
。
示例 1:
輸入: nums = [4,2,3] 輸出: true 解釋: 你可以通過把第一個 4 變成 1 來使得它成為一個非遞減數列。
示例 2:
輸入: nums = [4,2,1] 輸出: false 解釋: 你不能在只改變一個元素的情況下將其變為非遞減數列。
提示:
n == nums.length
1 <= n <= 104
-105?<= nums[i] <= 105
解決方案:
1、采用計數器判斷次數,超過次數,即返回值
2、貪心策略:三個一起判斷,進而統計次數
函數源碼:
class Solution { public:bool checkPossibility(vector<int>& nums) {int sum=0;for(int i=1;i<nums.size();i++){if(nums[i-1]>nums[i]){sum++;if(sum>=2) return false;if(i-2>=0 && nums[i-2]>nums[i]){nums[i]=nums[i-1]; }else nums[i-1]=nums[i];}}return sum<=1;} };