• 给定一个无序数组arr,求出需要排序的最短子数组长度。例如: arr = [1,5,3,4,2,6,7] 返回4,因为只有[5,3,4,2]需要排序。


    思路

    首先从左往右遍历,然后设定一个Max,如果遍历的过程中array[i]大于Max,则置换Max,若小于Max,则指定 k 记录该位置。
    然后再从右往左遍历,设定一个Min,在遍历的过程中array[i]小于Min,则置换Min,若大于Min,则指定 j 记录该位置。
    于是 j~~k之间的就是需要排序的。
    如上例,Max首先是1,然后遍历
    Max=1,array[i]=1,置换Max,Max=1
    Max=1,array[i]=5,置换Max,Max=5
    Max=5,array[i]=3,k指向3,k=2,此时5~~3之间需要排序
    Max=5,array[i]=4,k指向4,k=3,此时5~~4之间需要排序
    依次类推,k最终指向2.
    从右往左遍历的结果类似。

    public class ShortNeedSortNum {

      public static void main(String[] args) {

      int[] arr = {4,5,3,2,1,6,7};

       System.out.println(getMinlength(arr));

      }

      public static int getMinlength(int[] arr){

         if(arr==null||arr.length==0){

           return 0;

        }

        int length = arr.length;

         int min = arr[length-1];

               int noMinIndex = -1;

         for(int i=length-2; i>=0; 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<length; i++){

          if(arr[i]<max){

           noMaxIndex = i;

         }else{

              max = arr[i];

            }

          }

         return noMaxIndex-noMinIndex+1;

        }

    }

  • 相关阅读:
    黎曼猜想
    突发!LayUI 宣布下线。。。
    最新 Java 系列教程,共 99+ 篇,建议收藏~
    最新 Spring 系列教程,共 99+ 篇,建议收藏~
    超火的微信渐变国旗头像,竟然可以用 JavaScript 一键生成。。
    Spring Boot + EasyExcel 导入导出,好用到爆,可以扔掉 POI 了!
    Mongodb Schema设计技巧
    mongoose:find和findOne方法
    localstorage存放在哪里?+Nodejs+Mongodb登录模块
    Vue:列表展示 用户管理-el-table
  • 原文地址:https://www.cnblogs.com/huaiyinxiaojiang/p/6476969.html
Copyright © 2020-2023  润新知