代码拉取完成,页面将自动刷新
同步操作将从 star/offer100 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
<?php
/**
* 题目:
* 旋转数组最小的元素
* 题目描述:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路:
旋转将数组分为两个数组
前面元素都大于后面元素
二分法
*/
function minNumberInRotateArray($rotateArray)
{
$left = 0;
$right = count($rotateArray) - 1;
$min = 0;
while($rotateArray[$left] >= $rotateArray[$right]) {
// 分界点
if ($right - $left == 1) {
$min = $right;
break;
}
// rotateArray[left] rotateArray[right] rotateArray[mid]三者相等
// 无法确定中间元素是属于前面还是后面的递增子数组
// 只能顺序查找
$mid = $left + intval(($right - $left) / 2);
if ($rotateArray[$left] == $rotateArray[$right] && $rotateArray[$left] == $rotateArray[$mid]) {
return MinOrder($rotateArray,$left,$right);
}
if ($rotateArray[$mid] >= $rotateArray[$left]) {
$left = $mid;
} else {
$right = $mid;
}
}
return $rotateArray[$mid];
}
// 顺序寻找最小值
function MinOrder($rotateArray,$left,$right)
{
$min = $rotateArray[$left];
for ($i = $left + 1;$left <= $right;$left++) {
if ($min > $rotateArray[$left]) {
$min = $rotateArray[$left];
}
}
return $min;
}
$arr = [3,4,5,1,2];
$arr = [1,1,1,0,1];
$min = minNumberInRotateArray($arr);
echo $min;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。