1. 养乐多|杨城的个人博客首页
  2. 技术杂谈
  3. PHP

已知数组中的任意两数字的和,查找这两个数字在数组中的下标位置

给定数组 $arr = [1, 3 ,5, 6, 8, 10],已知这两数之和值为15,求这两个数字在数组中的下标位置。代码如下:

function searchIndex($arr, $num) {
    $index = "";
    $len = count($arr);
    for($i=0; $i<$len; $i++) {
        $res = array_search($num - $arr[$i], $arr);
        if($res !== false) {
            $index = $res.','.$i;
            return $index;
        }
    }
}

$arr = [1, 3 ,5, 6, 8, 10];
echo searchIndex($arr, 15); //输出 2,5

当数组中的任意两元素的和存在多个相同值时,比如 $arr = [1,3,5,7,4,8,11,12,16,18]中,1+18=19,3+16=19…那么上述代码需要进一步优化改进了。代码如下:

function searchIndex($arr, $num){
    $index = array();
    for($i = 0; $i < count($arr); $i++){
        $res = array_search($num - $arr[$i], $arr);
        if($res !== false) {
            $index[$res+$i] = $res.','.$i; //用两数下标之和作为index索引,便于去重
        }
    }
    return $index;
}
$arr = [1,3,5,7,4,8,11,12,16,18];
$list = searchIndex($arr, 19);
print_r($list);
//输出结果
Array
(
    [9] => 0,9
    [10] => 3,7
    [11] => 5,6
)

原创文章,作者:iConan,如若转载,请注明出处:https://www.aspyc.com/archives/749.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据