使用二进制搜索PHP查找数组中元素最后一次出现的索引

野寡妇

给定的数组具有重复的元素,因此,基本上,我想找到index我搜索过的元素的最后一次出现。

$arr = array(2, 3, 4, 4, 5, 6, 4, 8);
$x = 4; // number to search
$low = 0;
$high = count($arr)-1;
// I want this function to return 6 which is the index of the last occurrence of 4, but instead I'm getting -1 .
function binary_search_last_occ($arr, $x, $low, $high)
{
    while ($low <=$high)
    {
        $mid = floor(($low+$high)/2);
        $result = -1;
        if ($arr[$mid] == $x)
        {
            // we want to find last occurrence, so go for
            // elements on the right side of the mid 
            $result = $mid;
            $low = $mid+1;
        }
        else if($arr[$mid] > $x)
        {
            $high = $mid-1;
        }
        else
            $low = $mid+1;
    } 
    return $result;  
}
echo binary_search_last_occ($arr, $x, $low, $high); // outputs -1 ? 

我不确定为什么我得到-1。有什么建议?

Narendrasingh西索迪亚

我没有看到您的循环,但我认为使用它真的很容易获得这种功能

$arr = array(2, 3, 4, 4, 5, 6, 4, 8);
$result = [];
foreach($arr as $key => $val){
    $result[$val][] = $key;
}

echo end($result[4]);//6

或者您可以简单地将asort函数与array_searchlike一起使用

$arr = array(2, 3, 4, 4, 5, 6, 4, 8);
asort($arr);
echo array_search(4,$arr);//6

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在排序的数组的二进制搜索

数组中的二进制搜索

使用BinarySearch查找元素的第一次和最后一次出现

使用二进制搜索从TreeSet返回元素

使用二进制搜索查找在数字数组中出现奇数次的数字

二进制搜索以查找数组的K个最近元素

基于二进制矩阵中元素包含的快速数组处理

二进制搜索查找排序数组中比给定值最小和最大的元素?

查找二维数组中最大值的最后一次出现

R-查找按位二进制邻居(一次翻转一位)

如何计算在排序数组中两次出现的键的二进制搜索的最坏情况时间?

二进制搜索-在给定数组中查找目标的索引

如果使用二进制搜索找到元素,如何获取元素索引(递归)

使用char数组的C ++二进制搜索

二进制搜索对象数组中元素的字段

如何使用FindLast()查找元素的最后一次出现

二进制搜索以找到排序列表中小于特定值的最后一个元素

与比较器一起使用二进制搜索来查找首次出现

数组中的二进制搜索

排序数组并使用二进制搜索

Java数组二进制搜索

使用二进制搜索树查找重复项

C ++二进制搜索无法正常工作-查找元素不在数组中

PHP从给定索引的多维数组中查找最后一次出现

二进制搜索不返回数组中的最后一个值

查找二进制向量中第 n 次出现 1 的索引(matlab)

使用 ifstream 从二进制文件一次读取 4 个字节

使用java中的流查找Integer ArrayList中元素第二次出现的索引

ReactJS - 我实现了二进制搜索功能,它只在第一次工作