zoukankan      html  css  js  c++  java
  • 给定一个无序数组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;

        }

    }

  • 相关阅读:
    线程、协程、Goroutine的区别和联系
    Docker是如何实现跨平台的等问题
    Docker容器与虚拟机有什么区别?
    带www和不带www的域名有什么区别
    netty 入门前阅读
    netty 入门示例
    thingsboard 入门教程
    RSAUtil 工具类
    java zip 打包
    redis 详细讲解
  • 原文地址:https://www.cnblogs.com/huaiyinxiaojiang/p/6476969.html
Copyright © 2011-2022 走看看