/**
* TODO
*
* @author
* @version 1.0
* @date 2022/3/19 15:08
* 旋转数组的最小数字:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
* 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
* 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,
* 该数组的最小值为1.
* 递增有序数组 二分查找法
* <p>
* 最小值出现在无序的那一段,最大值的后面
*/
public class case2_旋转数组 {
public static void main(String[] args) {
int[] arr = {5, 1, 2, 3, 4};
int res = min(arr);
System.out.println(res);
Assert.assertEquals(res, 1);
}
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];
}
}