zoukankan      html  css  js  c++  java
  • 算法总结之 在数组中找到一个局部最小的位置

    给定无序数组arr, 已知arr中任意连个相邻的数都不相等。  写一个函数,只需返回arr中任意一个局部最小出现的位置

    本题利用二分查找

       1 如果arr为空后者长度为0,返回-1

       2 如果arr长度为1或者arr[0]<arr[1]  返回0

      3 如果arr[N-1] < arr[N-2] 返回N-1

     4 如果长度大于2 且 arr的左右两头都不是局部最小,则令 left=1, right =N-2, 然后进行二分查找

       给定思路   mid=(left+right)/2 

        如果 arr[mid] > arr[mid-1]  那么在 left......mid-1上肯定存在局部最小  所以令 right=mid-1

        如果 arr[mid] < arr[mid+1]  那么在 mid+1......right上肯定存在局部最小  所以令 left=mid+1

       上面两个都不满足,arr[mid] 就是局部最小  返回mid

        一直查找 知道left == right时停止  返回left就ok

    由此可见!!!!!! 二分查找并不是数组有序才能使用!!!!

      

          

    package TT;
    
    public class Test78 {
    
        public static int getLessIndex(int[] arr){
            if(arr==null || arr.length==0){
                return -1;
            }
            
            if(arr.length==1 || arr[0] <arr[1]){
                return 0;
            }
            if(arr[arr.length-1] < arr[arr.length-2]){
                return arr.length-1;
            }
            
            int left = 1;
            int right = arr.length-2;
            int mid = 0;
            
            while(left <right){
                
                mid = (left+right)/2;
                if(arr[mid]>arr[mid-1]){
                    right = mid-1;
                }else if(arr[mid]>arr[mid+1]){
                    left = mid+1;
                }else {
                    return mid;
                }            
                
            }
            
               return left;
            
        }
        
        public static void main(String[] args){
            
            int[] arr = new int[6];
            arr[0]=6;
            arr[1]=4;
            arr[2]=2;
            arr[3]=3;
            arr[4]=5;
            arr[5]=4;
            
            int x = getLessIndex(arr);
            System.out.println(x);
            
        }
        
    }

  • 相关阅读:
    httpclient在获取response的entity时报异常
    SpringCloud项目,接口调用返回http 500
    使用maven插件生成grpc所需要的Java代码
    win10 无法修改默认程序 默认打开方式的解决方法
    mock.js中新增测试接口无效,返回404
    echarts的pie图中,各区块颜色的调整
    HashMap源码注释翻译
    netty学习记录2
    netty学习记录1
    Java-JNA使用心得2
  • 原文地址:https://www.cnblogs.com/toov5/p/7494328.html
Copyright © 2011-2022 走看看