给你一个整数数组 arr ,请你删除一个子数组(可以为空),使得 arr 中剩下的元素是 非递减 的。 一个子数组指的是原数组中连续的一个子序列。 请你返回满足题目要求的最短子数组的长度。代码
时间: 2023-05-29 07:02:48 浏览: 146
思路:双指针法
从左到右遍历数组,若出现 arr[i] > arr[i+1] ,则一定需要删除 arr[i],但 arr[i] 是否需要删除还需进一步判断:
- 若存在 arr[i-1] > arr[i+1],则 arr[i] 不能单独删除,将 i 指针右移即可;
- 否则 arr[i] 需要删除。
同样,从右到左遍历数组,若出现 arr[i] > arr[i+1] , 则一定需要删除 arr[i+1],同理还需进一步判断。
最终,剩下的数组就是非递减的,返回数组长度即可。
参考代码如下:
相关问题
给你一个整数数组 arr ,请你删除一个子数组(可以为空),使得 arr 中剩下的元素是 非递减 的。 一个子数组指的是原数组中连续的一个子序列。 请你返回满足题目要求的最短子数组的长度。 C 语言
示例 1:
输入:arr = [1,2,3,10,4,2,3,5]
输出:3
解释:我们需要删除的最短子数组是 [10,4,2],长度为 3。剩余元素形成非递减数组 [1,2,3,3,5] 。
示例 2:
输入:arr = [5,4,3,2,1]
输出:1
解释:我们需要删除的最短子数组是 [5],长度为 1。
提示:
1 <= arr.length <= 10^5
0 <= arr[i] <= 10^9
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shortest-subarray-to-be-removed-to-make-array-sorted
以下是C语言的解法:
阅读全文