需要排序的最短子数组

来源:互联网 发布:红黑树 java 编辑:程序博客网 时间:2024/05/16 14:12

对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度.

/* 思路:首先,从左往右遍历数组,单独用一个变量记录遍历过得最大值
* 遇到遍历过的最大值大于当前数的情况,记录这种情况的最右的位置
* 然后从右往左遍历数组,用一个变量记录遍历过得最小值
* 遇到最小值比当前数要小的情况,记录这种情况的最左的位置
* 最做的位置和最右的位置中间的范围就是最短子数组
*
*/

public class 最短子数组 {    public static void main(String[] args) {        int A[]={1,5,4,3,2,6,7,2};        System.out.println(shortestSubsequence(A, A.length));    }    public static int shortestSubsequence(int[] A, int n) {        if (n<=1) {            return 0;        }        int max=A[0];        int min=A[n-1];        int left=0;        int right=0;        for(int i=0;i<n;i++){            if (A[i]>=max) {                max=A[i];            }else{                left=i;            }        }        for(int j=n-1;j>=0;j--){            if (A[j]<=min) {                min=A[j];            }else{                right=j;            }        }        if (left==right) {            return 0;        }           return left-right+1;    }}
原创粉丝点击