Find Minimum in Rotated Sorted Array

一般的二分查找都是low = mid - 1或者high = mid + 1之类来避免重复,但此题必须要比较两个数值,故而要low=mid或者high = mid。

public class Solution {
public int findMin(int[] num) {
if(num == null || num.length == 0) return 0;
int low = 0, high = num.length - 1;
while(low < high) {
if(low == high - 1 && num[low] > num[high]) return num[high];
int mid = low + (high - low) / 2;
if(num[low] < num[mid]) {
low = mid;
} else {
high = mid;
}
}
return num[0];
}
}

另外一个简洁一点的解法是: 

public class Solution {
public int findMin(int[] num) {
int low = 0, high = num.length - 1;
while(low < high && num[low] > num[high]) {
int mid = low + (high - low) / 2;
if(num[low] <= num[mid]) { //因为low可能等于mid,所以要考虑等于的情况
low = mid + 1;
} else {
high = mid;
}
}
return num[low];
}
}


posted @ 2014-12-30 12:50  江南第一少  阅读(78)  评论(0)    收藏  举报