大家好,我们一起来看看题目:旋转数组的最小数字
这道题就是用二分,特别注意下边界问题:)
来纪念下第一次双百的提交:
执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户
内存消耗:37.6 MB, 在所有 Java 提交中击败了99.96% 的用户
public int minArray(int[] numbers) {
if(numbers == null || numbers.length < 1) return 0;
if(numbers.length == 1) return numbers[0];
if(numbers.length == 2) return Math.min(numbers[0],numbers[1]);
if(numbers[0] >= numbers[numbers.length-1]){
// flipped
int i = numbers.length-1;
for (; i >= 0 ; i--) {
if(numbers[i] != numbers[0]) break;
}
if(i == -1 || numbers[i] > numbers[0]) return numbers[0];
return binary(numbers,0, i,numbers[0]);
}
else {
return numbers[0];
}
}
public static int binary(int[] a,int lo,int hi,int k){
while (lo <= hi){
int mid = lo + (hi - lo) / 2;
if(mid == lo) return Math.min(a[lo],a[hi]);
if(a[mid] >= k) lo = mid;
else if(a[mid] < k) hi = mid;
}
return 0;
}