(php实现剑指offer)旋转数字的最小数字
2018-03-08 21:50
225 查看
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路: 任何有序的或者接近有序的都可以尝试用二分查找法来搜索,中间的数字如果小于最右边的,从前面到中间的找,如果大于中间的,从中间到最右边的找<?php
function minNumberInRotateArray($rotateArray)
{
// write code here
$len=count($rotateArray);
if($len==0){
return 0;
}
$m=returnMin($rotateArray,0,$len-1);
return $m;
}
function returnMin($arr,$start,$len){
$mid=$start+floor(($len-$start)/2);
if($arr[$mid]<$arr[$mid-1]&&$arr[$mid>$arr[$mid+1]]){
return $arr[$mid];
}
if($arr[$len]<=$arr[$mid]){
return returnMin($arr,$mid,$len);
}else{
return returnMin($arr,$start,$mid);
}
}
思路: 任何有序的或者接近有序的都可以尝试用二分查找法来搜索,中间的数字如果小于最右边的,从前面到中间的找,如果大于中间的,从中间到最右边的找<?php
function minNumberInRotateArray($rotateArray)
{
// write code here
$len=count($rotateArray);
if($len==0){
return 0;
}
$m=returnMin($rotateArray,0,$len-1);
return $m;
}
function returnMin($arr,$start,$len){
$mid=$start+floor(($len-$start)/2);
if($arr[$mid]<$arr[$mid-1]&&$arr[$mid>$arr[$mid+1]]){
return $arr[$mid];
}
if($arr[$len]<=$arr[$mid]){
return returnMin($arr,$mid,$len);
}else{
return returnMin($arr,$start,$mid);
}
}
相关文章推荐
- JAVA实现旋转数组的最小数字问题(《剑指offer》)
- JAVA实现旋转数组的最小数字问题(《剑指offer》)
- 剑指offer(五,六),用两个栈实现队列,旋转数组的最小数字
- 剑指offer刷题之c++实现的旋转数组的最小数字
- 旋转数组的最小数字——剑指offer
- 剑指Offer:面试题8——旋转数组的最小值(java实现)
- java实现——008旋转数组的最小数字
- 《剑指offer》11.旋转数组的最小数字
- 剑指offer第六题【旋转数组的最小数字】c++实现
- 剑指Offer——旋转数组的最小数字
- 剑指offer编程题Java实现——面试题8旋转数组的最小数字
- 剑指offer_数组---旋转数组的最小数字
- 《剑指offer》面试题11:旋转数组的最小数字
- 剑指offer 旋转数组的最小数字
- 剑指Offer(11)旋转数组的最小数字
- 剑指Offer面试题:7.旋转数组的最小数字
- 剑指Offer_11_旋转数组的最小数字
- 剑指offer-旋转数组的最小数字
- 牛客《剑指Offer》 旋转数组的最小数字
- 剑指Offer------旋转数组的最小数字