面试题8:旋转数组最小数值

查找时候的移动方式:首先找到我们的中间下标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;

	}
}

控制台打印:

猜你喜欢

转载自blog.csdn.net/Handsome2013/article/details/81323244