最短排序

题目:对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。给定一个整数数组A及它的大小n,请返回最短子数组的长度。1,5,3,4,2,6,7],7   返回:4

思路:将数组排序再和原数组比较有多少位连续的不同,有可能一段不同中某一位相同,当时这个不能算,所以从两端扫描数组,直到某一位不同时跳出,然后求区间。

public int findShortest(int[] A, int n) {
        int[] B=new int[n];
        int s=0,e=0;
        for(int i=0;i<n;i++)
            B[i]=A[i];
           Arrays.sort(A);
       for(int i=0;i<n;i++){
           if(A[i]!=B[i]){
               s=i;
               break;
           }
       }
        for(int i=n-1;i>=0;i--){
            if(A[i]!=B[i]){
                e=i;
                break;
            }
        }
        if(e>s)
           return e-s+1;
        else return 0;
    }
原文地址:https://www.cnblogs.com/team42/p/6736720.html