两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解析

function twoSum($nums, $target) {
    foreach($nums as $k=>$v){
        $an = $target - $nums[$k];
        unset($nums[$k]);
        $res = array_search($an,$nums);
            if($res !== false){
                return [$k,$res];
            }
    }
}
$arr = twoSum($nums,$target);
print_r($arr);
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6
panda-sir

你这个题目 LeetCode有 给个普遍的解法

file

4年前 评论

@panda-sir 嗯,我也是看的 Leecode 上的题目,他这个两个for循环不算重复利用相同的元素吗?然后我这个解法能不能满足这个题目的需求啊?

4年前 评论
panda-sir 4年前

@panda-sir

file 我点执行代码他表示是正确的。我点提交又报错,请问什么原因?

file

4年前 评论
oneSmile 4年前

当测试用例为:$nums = [3,3]; $target = 6
输出结果就是:[0,0]
与预期结果不符:[0,1]

我的代码:

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $arr = $nums;
        for ($i = 0; $i < count($nums); $i++) {
            $sub = $target - $nums[$i];
            unset($arr[$i]);
            if (in_array($sub, $arr)) {
                return [$i, array_search($sub, $nums)];
            }
        }
    }
}
4年前 评论

@showcj :joy: :joy:多谢,搞了半天搞错了。

4年前 评论
cnguu

268ms 路过,性能全靠 PHP 函数,刷算法还是 C/C++ 靠谱

class Solution {
    function twoSum($nums, $target) {
        $res = [];
        foreach($nums as $k => $v) {
            $diff = $target - $v;
            if(in_array($diff, $nums)) {
                $diff_key = array_search($diff, $nums);
                if($diff_key !== $k) {
                    $res = [$k, $diff_key];
                    break;
                }
            }
        }
        return $res;
    }
}
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!