美文网首页
算法:两数之和

算法:两数之和

作者: 金星show | 来源:发表于2020-05-12 16:24 被阅读0次

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解法一--暴力解法:

$a = [1,5,2,7,11,15];
$num = count($a);
$target = 9;

for ($i=0;$i<$num-1;$i++) {
    $compare = $target - $a[$i];
    for ($j=$i;$j<$num;$j++) {
        if ($compare == $a[$j]) {
            printf("%d---%d \n",$i,$j);die();
        }
    }
}
时间复杂度: O(N*2)

解法二---两遍HASH表(如果有相同的值,例如 [1,5,2,7,11,16,5] hash map后相同的值会覆盖)

$a = [1,5,2,7,11,15];
$target = 9;
$b = array_flip($a);

foreach ($b as $k => $v) {
    $diff = $target - $k;
    if (isset($b[$diff]) && $b[$diff] != $v) {
        printf("%d---%d \n",$v,$b[$diff]);die();
    }
}
时间复杂度: 2 * O(N)   一般常数会省略

解法三---一遍HASH表(如果有相同的值,例如 [1,5,2,7,11,16,5] hash map后相同的值会覆盖)

$a = [1,5,2,7,11,15];
$target = 9;

foreach ($a as $k => $v) {
    $diff = $target - $v;

    if (isset($tmp[$diff])) {
        printf("%d---%d \n",$k,$tmp[$diff]);die();
    }
    $tmp[$v] = $k;
}
时间复杂度: O(N)  空间复杂度:O(N) 借助了一个临时数组

相关文章

  • 「算法」两数之和 & 两数之和 II

    00001 两数之和 题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只...

  • 算法:两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重...

  • 算法-两数之和

    这是一道LeetCode上的问题,详见两数之和,难度标注是简单,但是我思考到了一些比较复杂的情况,之后我会修改题目...

  • 算法--两数之和

    问题描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样...

  • 算法「两数之和」

    题目:给出数组nums和目标值target,找出和为目标值的两个数在数组中 想法:定义数组和目标值,遍历数组x使得...

  • 算法-两数之和

    算法对于程序的重要性不言而喻,所以从今天开始要一点一滴地积累自己的算法知识,同时也要充分地利用使用的程序语言所提供...

  • 算法:两数之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组...

  • 算法----两数之和

    给定一个数组,一个目标值,请在数组中找到和为目标值的两个数字,并返回他们的数组下标。 你可以假设每种输入只会对应一...

  • 算法——两数之和

    找出数组中两数之和等于目标数的下标 1、建一个桶,桶里key是没有找到差值的元素,value是它的index;2、...

  • ATRS第1周

    ATRS Algorithm算法题: 两数之和 - 力扣 (LeetCode) ``` function twoS...

网友评论

      本文标题:算法:两数之和

      本文链接:https://www.haomeiwen.com/subject/anwrthtx.html