题解 | #二分法求旋转数组最小元素#
旋转数组的最小数字
http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
function minNumberInRotateArray(rotateArray)
{
// write code here
var first = 0;
var last = rotateArray.length - 1;
// var NOTE = null;
if(rotateArray.length == 0){
return 0;
}
while(first != last){
var mid = first + ((last - first) >> 1);
if(rotateArray[first] < rotateArray[last]){
// 数组原本为 非递减数组
// 旋转之后,应该前面比后面大(前几个放到最后)
return rotateArray[first]
}
if(rotateArray[mid] > rotateArray[last]){
// 中间那个数比最后那个大,答案在后半部分
// [3 4 5 1 2]
first = mid + 1;
}else if(rotateArray[mid] < rotateArray[last]){
// 中间那个比后面的小,答案在前半部分
// [5 1 2 3 4]
last = mid;
}else{
// 例外情形
// 原数组[0 1 1 1 1] => [1 0 1 1 1]
--last
}
}
return rotateArray[first]
}