首先介绍下旋转数组:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
例如数组 {3, 4, 5, 1, 2} 为 {1, 2, 3, 4, 5} 的一个旋转。
使用二分查找的思想:
- 如果a[mid]小于a[high],说明最小值已经移到了mid位置或者mid往左的位置,所以此时最小值在low——mid之间;
- 反之,说明比较大的数值那一部分还占据着mid以及mid往左的位置,所以此时最小值在mid+1——到high之间。
根据这个规律就可以用O(logn)的时间复杂度来寻找到最小值la
package jianzhiOffer;
public class MinNumberInRotatedArray {
public static void getMin(int[] rotArray) {
//忘记写判断了!!!!!!!!
if(rotArray.length == 0){
return;
int len, low, high, mid;
len = rotArray.length;
low = 0;
high = len-1;
while(low<high) {
mid = (low + high) / 2;
if(rotArray[mid] < rotArray[high]) {
high = mid;
}
else {
low = mid + 1;
}
}
System.out.println(rotArray[low]);
}
public static void main(String[] args) {
int[] rotArray = new int[]{4, 5, 1, 2, 3};
getMin(rotArray);
}
}