タイトル
私のコード
public class 旋转数组的最小数字 {
/**
* @param args
* 改造二分法
*/
public static void main(String[] args) {
int[] a = { 3, 4, 5, 1, 2 };
int res = min(a);
System.out.println(res);
}
private static int min(int[] a) {
int begin = 0;
int end = a.length - 1;
// 考虑没有旋转这种特殊的旋转
if (a[begin] < a[end]) {
return a[begin];
}
// begin和end指向相邻元素,退出
while (begin + 1 < end) {
int mid = begin + ((end - begin) >> 1);
// 要么左侧有序,要么右侧有序
if (a[mid] >= a[begin]) {
begin = mid;
} else {
end = mid;
}
}
return a[end];
}
}