LeetCode:兩數之和解法與思路

題目:

https://leetcode-cn.com/problems/two-sum/

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。

你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。

整體思路:

先用O(n)複雜度生成哈希表,key爲值,value爲下標,通過迭代待定數組去判斷差值是否存在即可。

代碼思路:

  1. 迭代給定數組,生成value-key的哈希表,結構爲數組,存value相同key不同的
  2. 迭代給定數組,用目標值減去當前值結果如果和當前值相等,判斷哈希表中是否存在key爲當前值的記錄,如果有執行3,沒有繼續下一次迭代
  3. 如果減數和差相等且hash表中key值是大於1,則存在相同的兩個數符合要求,返回對應下標;如果減數和差不相等,則存在兩個不同的數符合要求。

代碼:

<?php
function twoSum($nums, $target) {
    $arr = [];
    foreach ($nums as $k => $v){
        $arr[$v][] = $k;
    }

    foreach ($nums as $key => $num){
        $diff = $target - $num;
        if (isset($arr[$diff])){
            if ( $diff == $num && count($arr[$diff]) > 1){
                return $arr[$diff];
            }
            if ($diff != $num){
                return [$arr[$num][0], $arr[$diff][0]];
            }
        }

    }
}
$nums = [2, 7, 11, 15];
$target = 9;
print_r(twoSum($nums, $target));

結果:

$php two_sum.php
Array
(
    [0] => 0
    [1] => 1
)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章