Java算法–第二章–查找与排序(7)题目:旋转数组的最小数字(改造二分法)
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.
代码:
package section02;
public class 旋转数组的最小数字 {
public static void main(String[] args) {
int[] arr = { 5,1, 2, 3, 4 };
int res = min(arr);
System.out.println("数组种最小的数为:" + res);
}
static int min(int[] arr) {
int begin = 0;
int end = arr.length - 1;
if(arr[begin] < arr[end])
return arr[begin];
while(begin + 1 < end) {
int mid = begin + ((end - begin) >> 1);
if(arr[mid] >= arr[begin]) {
begin = mid;
}else {
end = mid;
}
}
return arr[end];
}
}
输出:
数组种最小的数为:2