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

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

解题思路:

注意:这个题目和leetcode上的旋转数字的查找很类似。

但不一样,一个是找最小,要判断中间这个数是否是在递增子数组里面,如果遇到都相等的情况就不好判断。

// 当low和up两个指针相邻时候,就找到了最小值,也就是
 //右边序列的第一个值
 1 import java.util.ArrayList;
 2 public class Solution {
 3     public int minNumberInRotateArray(int [] array) {
 4         int low=0;
 5         int high=array.length-1;
 6         if(high==0||array==null)
 7         {
 8             return 0;
 9         }
10         
11         int mid=0;
12         
13         while(low<=high)
14         {
15             if(high-low==1)
16             {
17                 mid = high;
18                 break;
19             }
20             mid = low+(high-low)/2;
21             if(array[mid]>=array[high])
22             {
23                 low = mid;
24             }
25             else if(array[mid]<=array[high])
26             {
27                 high = mid;
28             }
29             else if(array[mid]==array[high] && array[mid] == array[low])
30             {
31                 int result = sort(array);
32                 return result;
33             }
34         }
35         return array[mid];
36     }
37     
38     public int sort(int [] array){
39         int result = array[0];
40         for(int i=1;i<array.length;i++)
41         {
42             if(result<array[i])
43             {
44                 result = array[i];
45             }
46         }
47         return result;
48     }
49 }
原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/10844684.html