php实现有序数组旋转后寻找最小值方法


Posted in PHP onSeptember 27, 2018

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

1、利用二分法寻找数组中的最小元素

2、定义两个 指针left和right,指向数组的第一个元素和最后一个元素,定义一个中间指针mid

3、如果arr[left]小于arr[mid],那么把左边指针移动到mid处,mid从新计算 4.如果arr[left]大于arr[mid],那么把右边指针移动到mid处,mid从新计算,缩小范围

left=0 right=arr.length-1
while arr[left]>=arr[right]
  if right-left==1
    mid=right
    break
  mid=left+(right-left)/2
  if arr[left]<=arr[mid]
    left=mid
  else
    right=mid
return arr[mid]
<?php
$arr=array(3,4,5,6,1,2);
function minNumberInRotateArray($rotateArray){
    $left=0;//左边指针
    $right=count($rotateArray)-1;//右边指针
    //判断条件,left大于right就一直进行
    while($rotateArray[$left]>=$rotateArray[$right]){
        //left和right已经紧挨着了
        if(($right-$left)==1){
            $mid=$right;
            break;
        }  
        //中间点
        $mid=ceil($left+($right-$left)/2);
        //left小于中间点
        if($rotateArray[$left]<$rotateArray[$mid]){
            //left移动到中间点
            $left=$mid;
        }else{
            //right移动到中间点
            $right=$mid;
        }  
    }  
   
    return $rotateArray[$mid];
}
$min=minNumberInRotateArray($arr);
var_dump($min);//int(1)

以上就是php如何实现有序数组旋转后寻找最小值(代码)的详细内容,感谢大家对三水点靠木的支持。

PHP 相关文章推荐
让PHP支持页面回退的两种方法
Jan 10 PHP
php抓取https的内容的代码
Apr 06 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
php中file_exists函数使用详解
May 08 PHP
PHP简单处理表单输入的特殊字符的方法
Feb 03 PHP
PHP处理数组和XML之间的互相转换
Jun 02 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
PHP删除数组中指定下标的元素方法
Feb 03 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
Feb 20 PHP
PHP7新功能总结
Apr 14 PHP
基于php解决json_encode中文UNICODE转码问题
Nov 10 PHP
PHP实现SMTP邮件的发送实例
Sep 27 #PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
Sep 26 #PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 #PHP
多个Laravel项目如何共用migrations详解
Sep 25 #PHP
php中上传文件的的解决方案
Sep 25 #PHP
PHP调用微博接口实现微博登录的方法示例
Sep 22 #PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 #PHP
You might like
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
php算法实例分享
2015/07/14 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
JavaScript Date对象使用总结
2009/05/14 Javascript
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
2019/05/24 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Python3实现二叉树的最大深度
2019/09/30 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
keras中的卷积层&amp;池化层的用法
2020/05/22 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
python中的unittest框架实例详解
2021/02/05 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
升职演讲稿范文
2014/05/23 职场文书
售后客服个人自我评价
2014/09/14 职场文书
检讨书怎么写?
2019/06/21 职场文书