C++描述 LeetCode 665. 非递减数列
大家好,我叫亓官劼(qí guān jié )
给你一个长度为 n
的整数数组,请你判断在 最多 改变 1
个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中所有的 i
(0 <= i <= n-2)
,总满足 nums[i] <= nums[i + 1]
。
示例 1:
示例 2:
说明:
-
1 <= n <= 10 ^ 4
-
- 10 ^ 5 <= nums[i] <= 10 ^ 5
解题思路
题目要求最多改变一个数的情况下,判断能否变为非递减序列,则我们从头遍历序列,如果出现num[i] > nums[i+1]
,我们判断能否通过这次修改后,使得整个数列是非递减序列。修改一共有2种情况,第一种是nums[i]
太大导致的递减,所以我们修改nums[i] = nums[i+1];
第二种情况,nums[i+1]太小所导致的,我们修改:nums[i+1] = nums[i]
。如果这两种修改都无法使得修改后的数列是非递减序列,则无法通过一次修改将这个序列变为非递减序列。在第二次修改的时候记得复原nums[i]
。
算法实现