题目:两数之和:给定一个不重复整数数组,找出其中两个数相加等于目标值?

 

看到这个题,第一想法一般是:循环穷举,列出所有可能。但如果有人问你这个问题,肯定就不会这么简单了。应该会有更有效的算法。

 

我写了几个方法,经过效率对比,最后留下一个效率最快的。思路如下:

1,先将数组排序。

2,遍历数组,将小于目标值一半的值 放入一个临时数组。

3,遍历后半部分的时候,再从临时数组查找 是否有对应的值。

 

提示:isset() 效率 要比 in_array() 高,如果用 array_flip(),则会增加消耗。

如果谁有更优的算法,麻烦告诉我一下(qq:76723287),谢谢;

 

 

 


/**
 * 给定一个整数数组,找出其中两个数相加等于目标值
 * @param type $arr
 * @param type $sum
 * @return type
 */
function arrsum($arr, $sum) {
    $return = [];
    $agv = $sum / 2;
    sort($arr);
    $tmp = [];
    foreach ($arr as $value) {
        if ($value < $agv) {
            $tmp[$sum - $value] = $value;
        } else {
            if ($value >= $sum) {
                break;
            }
            if (isset($tmp[$value])) {
                $return[] = [$tmp[$value], $value];
            }
        }
    }
    return $return;
}

点赞(3518) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部