dmz社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 750|回复: 0

[PHP]算法-旋转数组的最小值的PHP实现

[复制链接]
  • TA的每日心情

    2024-11-19 20:46
  • 签到天数: 244 天

    [LV.8]以坛为家I

    4434

    主题

    1459

    帖子

    1万

    积分

    会|员

    Rank: 9Rank: 9Rank: 9

    积分
    10734
    发表于 2019-10-27 00:36:14 | 显示全部楼层 |阅读模式

    本站资源全部免费,回复即可查看下载地址!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    [PHP] 纯文本查看 复制代码
    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
    
    1.可以看成是二分查找法,查找最小的元素
    2.{3,4,5,1,2} 可以看成{3,4,5} {1,2},left和right两个指针分别指向第一个和最后一个
    3.mid=left+(right-left)/2 如果arr[left] <= arr[mid]  那么 left指针移到mid处,left=mid
        如果arr[left] > arr[mid]那中间元素必定是在右半区,right指针移到mid处  right=mid
    4.终止条件是right-left=1 mid=right
    5.
    
    minNumberInRotateArray(arr)
        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] 纯文本查看 复制代码
    function minNumberInRotateArray($arr)
    {
            $left=0;
            $size=count($arr);
            $right=$size-1;
            $mid=$left+intval(($right-$left)/2);
            while($arr[$left]>=$arr[$right]){
                    if(($right-$left)==1){
                            $mid=$right;
                            break;
                    }  
                    $mid=$left+intval(($right-$left)/2);
                    if($arr[$left]<=$arr[$mid]){
                            $left=$mid;
                    }else{
                            $right=$mid;
                    }  
            }  
            return $arr[$mid];
    }
     
    $arr=array(3,4,5,1,2);
    $m=minNumberInRotateArray($arr);
    var_dump($m);



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|本站代理|dmz社区

    GMT+8, 2024-12-24 00:27 , Processed in 0.080569 second(s), 33 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表