class Solution { // 模板二 public int findLengthOfShortestSubarray(int[] arr) { int n = arr.length; int i = 1, j = n-1; while (i<n && arr[i-1]<=arr) ++i; if (i == n) return 0; // arr已经有序 while (j-1>=0 && arr[j-1]<=arr[j]) --j; int l = j, r = n-1; int ans = j; // 最坏结果只保存right for (int k = 0; k < i; ++k) { int target = arr[k]; l = j; r = n; //搜索right区间[j,n-1] while (l<r) { int mid = (l+r)>>1; if (arr[mid] < target) { l = mid+1; } else { r = mid; } } ans = Math.min(ans, r-k-1); } return ans; }}