面试16_16

 
寻找最短序列从数学的角度上来看就是寻找最后一个逆序对的位置,逆序对就是在一个顺序的数组中,出现一个不按顺序排列的值,比如 [1 3 4 2  6 8]  其中原数组原本是个从小到大排序的,其中2是不按顺序排序,2就是个逆序对
从右边往左,找到最后一个变小的数字
从左往右,找到最后一个变大的数字
 
 
 
public int[] subSort(int[] array) {
    if(array.length==0)return new int[]{-1,-1};
    int max=array[0];
    int r=-1;
    for(int i=1;i<array.length;i++){
        if(max<=array[i]){
            max=array[i];
        }else {
            r=i;
        }
    }
    int min=array[array.length-1];
    int l=-1;
    for(int i=array.length-2;i>=0;i--){
        if(min>=array[i]){
            min=array[i];
        }else {
            l=i;
        }
    }
    return new int[]{l,r};
}
 
 
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读