查找时候的移动方式:首先找到我们的中间下标middle,然后判断这个下标和low或者high比对,可能就会将low或者high其中一个移动到middle位置,然后从新从这对low和high中查询到middle,然后重复上边操作,直到剩下两个数的时候,就是选后边一个数为最小即可。
package 剑指offer;
public class RotateArrayMin {
public static void main(String[] args) {
int[] shuzu = { 3, 4, 5, 1, 2 };
int index = findMin(shuzu);
System.out.println("最小值的下标是:" + index + " 最小值是:" + shuzu[index]);
}
public static int findMin(int[] shuzu) {
// 利用二分查找,首先找到中间的一个数,我们这里全部以下标为基准类找
int low = 0;
int high = shuzu.length - 1;
int middle = 0;
while (shuzu[low] > shuzu[high]) {
middle = (low + high) / 2;
if (high - low == 1) {
middle = high;
return middle;
}
if (shuzu[middle] >= shuzu[low]) {
low = middle;
} else if (shuzu[middle] <= shuzu[high]) {
high = middle;
}
}
return middle;
}
}
控制台打印: