剑指offer——旋转数组的最小数字

时间:2019-10-29 20:57:39   收藏:0   阅读:90

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
 
代码实现(Java)
 
 1 import java.util.ArrayList;
 2 public class Solution {
 3     public int minNumberInRotateArray(int [] array) {
 4         if(array==null || array.length==0){
 5             return 0;
 6         }
 7         int left=0;
 8         int right=array.length-1;
 9         int index=left;
10         int indexMid;
11         while(array[left]>=array[right]){
12             if(right-left==1){
13                 index=right;
14                 break;
15             }
16             indexMid=(left+right)/2;
17             if(array[indexMid]==array[left] && array[indexMid]==array[right]){ 
18             // 如果三个数都相等,则需要进行顺序处理,从头到尾找最小的值
19             //考虑对于{1,2,2,2,2,2} --> {2,2,2,2,2,1,2}  这种有重复值的,二分只适合 
20             //在有序的基础上遍历,只能遍历整个整个这部分的数组了。
21                 for(int i=1;i<array.length;i++){
22                     int min=array[0];
23                     if(min>array[i]){
24                         return array[i];
25                     }
26                 }
27             }else if(array[indexMid]>=array[left]){
28                 // 如果中间位置对应的值在前一个排好序的部分,将left设置为新的处理位置
29                 left=indexMid;
30             }else {
31                 // 如果中间位置对应的值在后一个排好序的部分,将right设置为新的处理位置
32                 right=indexMid;
33             }     
34         }
35         return array[index];
36     }
37 }

 

原文:https://www.cnblogs.com/wangqiong/p/11761125.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!