Maison  >  Article  >  développement back-end  >  Comment trouver la valeur minimale en php après avoir fait pivoter un tableau ordonné (code)

Comment trouver la valeur minimale en php après avoir fait pivoter un tableau ordonné (code)

不言
不言original
2018-09-17 16:24:521631parcourir

Le contenu de cet article explique comment trouver la valeur minimale (code) après la rotation d'un tableau ordonné en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Déplacer les premiers éléments d'un tableau vers la fin du tableau est appelé rotation du tableau. Entre une rotation d’un tableau trié de manière non décroissante et génère le plus petit élément du tableau pivoté. Par exemple, le tableau {3,4,5,1,2} est une rotation de {1,2,3,4,5} et la valeur minimale du tableau est 1.

REMARQUE : Tous les éléments donnés sont supérieurs à 0. Si la taille du tableau est 0, veuillez renvoyer 0.

1. Utilisez la méthode de dichotomie pour trouver le plus petit élément du tableau

2 Définissez deux pointeurs gauche et droit, pointant vers le premier élément et le dernier élément. du tableau, définissez un pointeur intermédiaire mid

3. Si arr[left] est inférieur à arr[mid], alors déplacez le pointeur gauche vers mid, et mid sera recalculé 4. Si arr[left] est supérieur à arr[mid], alors déplacez le pointeur droit vers mid, mid sera recalculé et la plage sera réduite

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)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn