<?php
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param rotateArray int整型一维数组
* @return int整型
*/
function minNumberInRotateArray( $rotateArray )
{
// write code here
$len = count($rotateArray);
$start = 0;
$end = $len -1;
while ($start <= $end) {
$mid = ($start + $end) >> 1;
if ($rotateArray[$mid] > $rotateArray[$end]) {
$start = $mid + 1;
} elseif ($rotateArray[$mid] == $rotateArray[$end]) {
$end--;
} else {
$end = $mid;
}
}
return $rotateArray[$start];
}
php实现了排行第二位的大神的思路,自己总结一下思路方便记忆:首先确定的是,数组可分为两个有序的数组,最小的肯定在后半段的数组里,第一步肯定是先找这个后半段数组,用mid去和end比较,如果mid大,那么确定mid不在后半段数组里,如果mid和high相等,那么找high前面的数来做判断,目的是为了让mid能够移动, mid移动到某个值,发现小于end了,表明这个时候,mid已经在后半段数组里了,那么只需要在后半段数组的mid之前的(包含mid)里找最小的就行。