旋转数组的最小数字

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
 
 1 import java.util.ArrayList;
 2 public class Solution {
 3     public int minNumberInRotateArray(int [] array) {
 4         if (array.length == 0) return 0;
 5         int n = array.length;
 6         int l = 0, r = array.length - 1;
 7         while (l < r) {
 8             int mid = (l + r) / 2;
 9             int flag = 0;
10             if (mid - 1 < 0 || array[mid - 1] > array[mid]) flag++;
11             if (mid + 1 >= array.length || array[mid + 1] >= array[mid])flag++;
12             if (flag == 2) {
13                 return array[mid];
14             }
15             if (array[mid] <= array[n - 1]) {
16                 r = mid - 1;
17             } else {
18                 l = mid + 1;
19             }
20         }
21         return array[l];
22     }
23 }

 

posted @ 2020-02-12 16:18  hyx1  阅读(71)  评论(0编辑  收藏  举报