【问题标题】:What is wrong with my code - circularly sorted array does not show any results我的代码有什么问题 - 循环排序的数组不显示任何结果
【发布时间】:2011-12-19 23:23:20
【问题描述】:

我今天去面试,有人问我这个问题:

如何在循环排序数组中轻松找到一个项目

由于我不知道答案,我试图找到解决方案。这是我所拥有的:

谢谢

<?php


function searchincircularsorterlist($a, $len, $num) {
    $start=0;
    $end=$len-1;
    $mid = 0;
    while($start<$end) {
        $mid=$start+$end/2;
        if ($num == $a[$mid]) {
            return $num;
        }
        if($num<$a[$mid]) {
            if($num<$a[$start] && $a[$start]<=$a[$start+1])
            $start=$mid++;
            else
            $end=$mid--;
            }
        else {
            if($num>$a[$end] && $a[$end-1]<=$a[end])
            $end=$mid--;
            else
            $start=$mid++;
        }
    }
    if ($start == $end && $num == $a[$start]) {
        return $num;
    }
    return -1; 
}

$array = array(7,8,9,0,1,2,3,4,5,6);
var_dump(searchincircularsorterlist($array,sizeof($array),4));

我正在尝试使用循环排序的数组,但由于某种原因它不起作用。我的代码有什么问题?

【问题讨论】:

    标签: php arrays sorted


    【解决方案1】:

    1) 学习priority of operations。你应该有: $mid=($start+$end)/2;你最终将 $end 除以 2 然后 $start - 结果。这就是为什么你有一个无限循环。

    2) 使用:$start=$mid+1; 而不是 $start=$mid++;,这将有助于减少循环次数

    <?php
    
    function searchincircularsorterlist($a, $len, $num) {
        $start=0;
        $end=$len-1;
        $mid = 0;
        while($start<$end) {
            $mid=($start+$end)/2;
            if ($num == $a[$mid]) {
                return $num;
            }
            if($num<$a[$mid]) {
                if($num<$a[$start] && $a[$start]<=$a[$start+1])
                $start=$mid+1;
                else
                $end=$mid-1;
                }
            else {
                if($num>$a[$end] && $a[$end-1]<=$a[end])
                $end=$mid-1;
                else
                $start=$mid+1;
            }
        }
        if ($start == $end && $num == $a[$start]) {
            return $num;
        }
        return -1; 
    }
    
    $array = array(7,8,9,0,1,2,3,4,5,6);
    var_dump(searchincircularsorterlist($array,sizeof($array),4));
    

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多