The smallest number wins the offer (PHP version rewritten) --- rotating array

/**
*
* @param $number 旋转之后的数组
* @param $length 数组长度
*/

function MinNumber($number,$length){
if ($number==null||$length<=0){
throw new Exception('Invalid parameters');
}
$index1 = 0;
$index2 = $length-1;
$indexMid = $index1;
while ($number[$index1]>=$number[$index2]){
if ($index2-$index1==1){
$indexMid=$index2;
break;
}

$indexMid = ceil(($index1+$index2)/2);
if ($number[$index1]==$number[$index2] && $number[$indexMid]==$number[$index1]){
return MinInOrder($number,$index1,$index2);
}

if ($number[$indexMid]>=$number[$index1]){
$index1 = $indexMid;
}elseif ($number[$indexMid]<=$number[$index2]){
$index2 = $indexMid;
}
}

return $number[$indexMid];
}

function MinInOrder($number,$index1,$index2){
$result = $number[$index1];

for($i=$index1+1;$i<=$index2;++$i){
if ($result>$number[$i]){
$result = $number[$i];
}
}

return $result;
}
$number = [1,1,0,1,1,1];
$a = MinNumber($number,6);
print_r($a);

Guess you like

Origin www.cnblogs.com/cyworz/p/11243105.html