3818. 移除前缀使数组严格递增
题目描述
给你一个整数数组 nums。
你需要从 nums 中 恰好 移除一个前缀(可以为空)。
返回一个整数,表示被移除的前缀的 最小 长度,使得剩余的数组 严格递增 。
数组的 前缀 是从数组的起始位置开始,一直延伸到任意位置的子数组。
如果一个数组的每个元素都严格大于它的前一个元素(若存在),则称该数组 严格递增 。
示例 1:
输入: nums = [1,-1,2,3,3,4,5]
输出: 4
解释:
移除前缀 prefix = [1, -1, 2, 3] 后,剩余数组为 [3, 4, 5],严格递增。
示例 2:
输入: nums = [4,3,-2,-5]
输出: 3
解释:
移除前缀 prefix = [4, 3, -2] 后,剩余数组为 [-5],严格递增。
示例 3:
输入: nums = [1,2,3,4]
输出: 0
解释:
数组 nums = [1, 2, 3, 4] 已经是严格递增的,因此移除空前缀即可。
提示:
1 <= nums.length <= 105-109 <= nums[i] <= 109
解法
方法一:倒序遍历
我们可以从数组的末尾开始往前遍历,找到第一个不满足严格递增条件的位置 \(i\),即满足 \(nums[i-1] \geq nums[i]\) 的位置。此时,移除前缀的最小长度即为 \(i\)。
如果整个数组都是严格递增的,那么我们不需要移除任何前缀,返回 \(0\) 即可。
时间复杂度 \(O(n)\),其中 \(n\) 为数组的长度。空间复杂度 \(O(1)\)。
1 2 3 4 5 6 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |