基础想法,遇到比前一个小的,说明旋转了,直接输出。但是效率应该比二分慢
class Solution {
public int minArray(int[] numbers) {
if(numbers.length==0) return numbers[0];
for(int i=1; i<numbers.length; i++){
if(numbers[i-1]>numbers[i])
return numbers[i];
}
return numbers[0];
}
}
二分的基本框架是有的,在有序数组里找值,找左右边界。但是其他题都要考虑变通,主要是判断条件,以及二分的区间问题。本题的退出条件left和right是否相等不影响结果
class Solution {
public int minArray(int[] numbers) {
int left = 0;
int right = numbers.length-1;
while(left<right){
int mid = left + (right - left)/2;
if(numbers[mid] < numbers[right]){
right = mid;
}else if(numbers[mid] > numbers[right]){
left = mid + 1;
}else if(numbers[mid] == numbers[right]){
right = right - 1;
}
}
return numbers[left];
}
}