1574. 删除最短的子数组使剩余数组有序

1574. 删除最短的子数组使剩余数组有序

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:

原题链接:

1574. 删除最短的子数组使剩余数组有序

https://leetcode.cn/problems/shortest-subarray-to-be-removed-to-make-array-sorted/description/

完成情况:

1574. 删除最短的子数组使剩余数组有序_第1张图片

解题思路:

1574. 删除最短的子数组使剩余数组有序_第2张图片

参考代码:

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;
    }
}

你可能感兴趣的:(算法知识,#,LeetCode题解,java学习,java,开发语言,算法)