旋转数组的最小数字

来源:互联网 发布:sql select as table 编辑:程序博客网 时间:2024/06/03 03:34

题目

这里写图片描述

思路

数列分为前后两部分有序数列,最小值在前后数列的交界处,采用二分查找方法不断逼近,不过要考虑非递减数列的重复数字情况

代码

 int binarySearch(int[] arr,int front,int rear){        if(front+1 == rear || front == rear)            return arr[rear]<arr[front]?arr[rear]:arr[front];        int index = (front+rear)/2;        if(arr[front] == arr[index] && arr[rear] == arr[index]){//此时两边中间都一样,考虑到特殊情况,我们两边均遍历一次,进行最后的比较大小。            int find1 = binarySearch(arr,front,index);            int find2 = binarySearch(arr,index+1,rear);            return find1<find2?find1:find2;        }else if(arr[index] >= arr[front] && arr[index] > arr[rear]){            return binarySearch(arr,index,rear);        } else{            return binarySearch(arr,front,index);        }    }
原创粉丝点击