• 面试题8:旋转数组的最小数字


    //面试题8:旋转数组的最小数字
    //递增排序的{1,2,3,4,5}----->旋转为 {3,4,5,1,2}
    //求最小的数字
    package com.hb.jzoffer;
    
    import offer.utilities.ArrayUtils;
    
    //面试题8:旋转数组的最小数字
    
    //{1,2,3,4,5}----->旋转为 {3,4,5,1,2}
    publicclass MinNumberInRotatedArray_8 {
    public  int  Min(int[] array ) throws Exception{
            int  length = array.length ;
            if(length < 0){
                Exception e = new Exception();
                throw e;
            }
            int  index1 = 0 ; 
            int  index2 = length - 1;
            int  indexMid = index1 ; //如果下面while循环里面的不成立,说明数组是有序的,没有旋转,所以indexMid初始化为Index1
            while(array[index1] >= array[index2]){
                if(index2 - index1 == 1){
                    indexMid = index2;
                    break ;
                }
                indexMid = (index1 + index2) / 2 ;
                
                //如果下标为index1 、index2 和 indexMid 指向的三个数字相等,
                //则只能用书序查找
                if(array[index1] == array[index2] && array[indexMid] == array[index1]){
                    return MinInOrder(array , index1 , index2);                
                }
                
                if(array[indexMid] >= array[index1]){
                    index1 = indexMid ;
                }else if(array[indexMid] <= array[index2]){
                    index2 = indexMid ;
                }    
            }
            
            return array[indexMid];    
            
        }
        
        public int MinInOrder(int[] array , int index1 , int index2){
            int  result = array[index1];
            for(int i = index1 + 1 ; i <= index2 ; i++){
                if(result > array[i]){
                    result = array[i] ;
                }            
            }        
            return result;
        }
        
        public static void main(String[] args) throws Exception {
            int[] array = {3,4,5,1,2};
            int[] array1 = {1,1,1,0,1};
            MinNumberInRotatedArray_8 findMid = new MinNumberInRotatedArray_8();
            int min = findMid.Min(array);
            int min1 = findMid.Min(array1);
            ArrayUtils.printArray(array);
            System.out.println(min);
            ArrayUtils.printArray(array1);
            System.out.println(min1);
            
        }
        
        
    
    }
  • 相关阅读:
    使用docker sail镜像创建laravel项目
    Python使用阿里云镜像
    VMware安装OpenEuler虚拟机并配置图形界面
    机器学习模型评估指标汇总 (一)
    机器学习模型评估指标汇总 (二)
    运行docker命令需要sudo权限的问题
    如何不重装修复损坏的 Ubuntu 系统
    卡尔曼滤波
    升级anaconda
    jupyter notebook 代码自动补全
  • 原文地址:https://www.cnblogs.com/Mokaffe/p/4360937.html
Copyright © 2020-2023  润新知