1574. 删除最短的子数组使剩余数组有序
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
原题链接:
1574. 删除最短的子数组使剩余数组有序
https://leetcode.cn/problems/shortest-subarray-to-be-removed-to-make-array-sorted/description/
完成情况:
解题思路:
参考代码:
package LeetCode中等题02;
public class __1574删除最短的子数组使剩余数组有序 {
/**
* 删除连续子数组,使数组有序。
* 要求: 数组要是递增的,允许相等(即不变),,,
*
* @param arr
* @return
*/
public int findLengthOfShortestSubarray(int[] arr) {
//满足这样条件的最短的子数组长度。
//双指针,区间探索
int n = arr.length,j = n-1;
while (j > 0 && arr[j - 1 ] <= arr[j]){
j--; //j为从后往前,第一个不单调的数组位置。
}
if (j == 0){
return 0;
}
int res = j;
for (int i = 0;i<n;i++){
while (j<n && arr[j] < arr[i]){
j++;
}
res = Math.min(res,j-i-1); //比较是不是平滑下降
if (i+1 < n && arr[i] > arr[i+1]){
break;
}
}
return res;
}
}