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);
            
        }
        
    }

  • 相关阅读:
    设计一个smartnic
    lshw
    VF PF Reset Tests
    iommu dmar 和虚拟机
    2019-10-31-win10-uwp-访问解决方案文件
    2019-10-31-win10-uwp-访问解决方案文件
    2019-8-31-dotnet-使用-Environment.FailFast-结束程序
    2019-8-31-dotnet-使用-Environment.FailFast-结束程序
    docker dead but pid file exists 问题
    java数据结构(二叉树)
  • 原文地址:https://www.cnblogs.com/toov5/p/7494328.html
Copyright © 2011-2022 走看看