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

  • 相关阅读:
    nice -n 10 bash 和 chrt 10 bash 和 echo -17 > /proc/PID/oom_score_adj
    使用NGINX+LUA实现WAF功能 和nginx 防盗链
    hdfs 通过命令坏块监测和删除或者地址获取参数做监控
    kafka 的server.properties
    ntpd服务
    kafka笔记博客
    k8s高可用
    K8S集群Master高可用实践
    String:字符串常量池
    如何设计出优秀的Restful API?
  • 原文地址:https://www.cnblogs.com/toov5/p/7494328.html
Copyright © 2011-2022 走看看