力扣1574.删除最短的子数组使剩余数组有序
-
剩下有序 –> 前面一段 + 后面一段 有序
- 前面有序 + 后面有序 + 前面最后一项 <= 后面第一项
- 先反向遍历找到right的最小值
- 然后正向遍历找left的最大值
- 当nums[left] > nums[right]时 right++
-
class Solution {public:int findLengthOfShortestSubarray(vector<int>& arr) {int n = arr.size(),right = n-1;while(right && arr[right-1] <= arr[right])right--;if(!right) return 0;int res = right;for(int left=0;left == 0 || arr[left-1] <= arr[left];left++){while(right<n && arr[left] > arr[right])right++;res = min(res,right-left-1);}return res;}};