题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0.
二分法:
思路:1.双指针,一个指向开始一个指向最后一个。从中间开始。
2.right-left==1结束的条件
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if (array.length == 0)
return 0;
//开始点
int left = 0;
//数组最后一个元素
int right = array.length - 1;
//初始化一个中间值
int middle = 0;
//循环,左边大于等于右边
while (array[left]>=array[right]) {
//右边减去左边是
if(right-left==1){
middle = right;
break;
}
//中点
middle = left + (right - left) / 2;
//如果中间大于左边的话,那么最小值右边
if (array[middle] >= array[left]) {
left = middle;
}
//当中间值小于右边,那么最小值在左边
if (array[middle] <= array[right]) {
right = middle;
}
}
return array[middle];
}
}