欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

8.6需要排序的最短子数组长度

程序员文章站 2024-03-16 13:38:22
...
题目

给定一个无序数组arr,要使数组排序成递增的,求出需要排序的最短子数组长度。

代码实现
public class GetMinLength {
    public int getMinLength(int[] arr) {
        if (arr == null || arr.length < 2) {
            return 0;
        }

        int min = arr[arr.length - 1];
        int noMinIndex = -1;

        for (int i = arr.length - 2; i != -1; i--) {
            if (arr[i] > min) {
                noMinIndex = i;
            } else {
                min = arr[i];
            }
        }
        if (noMinIndex == -1) { //说明原数组有序,不需要排序
            return 0;
        }

        int max = arr[0];
        int noMaxIndex = -1;

        for (int i = 1; i != arr.length; i++) {
            if (arr[i] < max) {
                noMaxIndex = i;
            } else {
                max = arr[i];
            }
        }

        return noMaxIndex - noMinIndex + 1;
    }

    public static void main(String[] args) {
        GetMinLength gml = new GetMinLength();
        int[] arr = new int[]{1, 3, 4, 6, 5, 4, 4, 7,9};

        System.out.println(gml.getMinLength(arr));
    }
}