美文网首页程序员
力扣刷题——1. 两数之和

力扣刷题——1. 两数之和

作者: 烂尾大王_BigTree | 来源:发表于2020-06-28 11:26 被阅读0次

题目

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

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

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

解题语言

PHP

解题思路

因为求两数之和,我首先想的是进行排序,这样后期查找能节省一定时间,但是快排的时间复杂度为nlogn,后期还需要对数组进行双重循环,时间复杂度为n2,所以排序只会增加时间复杂度。

由于最终需要获取数组下标,所以我决定再创建一个数组,将原有数组下标及数组值与目标值的差值记录下,并在原数组中循环查找新数组是否有与其匹配的值,此时的时间复杂度为n2,代码如下:

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $arr = array();
        $length = count($nums);

        for($i = 0; $i < $length; $i++){
            if(strlen($index = array_search($nums[$i], $arr))){
                $brs = array($index, $i);

                return $brs;
            }

            $arr[$i] = $target - $nums[$i];
        }
    }
}

但是在PHP中查找数组值需要遍历数组,所以我决定将新数组的键值对翻转,将数组值与目标值的差值作为数组键,这样只需要在原数组循环时在新数组中查找是否存在原数组值的键值即可,此时时间复杂度为n,代码如下:

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $arr = array();
        $length = count($nums);

        for($i = 0; $i < $length; $i++){
            if(array_key_exists($nums[$i], $arr)){
                $brs = array($arr[$nums[$i]], $i);

                return $brs;
            }

            $arr[$target - $nums[$i]] = $i;
        }
    }
}

相关文章

  • 力扣刷题——1. 两数之和

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

  • ATRS第1周

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

  • 面试问到的算法

    快排,冒泡区别,两数之和,反转链表,判断环,数组中重复数组350 力扣 力扣26题

  • 力扣百题-1. 两数之和

    比较简单,用一个Map记录曾经遍历过的元素,计算出差值,如果符合,直接返回结果,时间复杂度O(n),空间复杂度O(n)

  • [力扣] 1. 两数之和

    链接:https://leetcode-cn.com/problems/two-sum 题目 [简单] 给定一个整...

  • 【力扣】1. 两数之和

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

  • 力扣1. 两数之和

    题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target ...

  • 力扣算法题-两数之和

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

  • leetcode 刷题 题1.两数之和

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

  • 力扣题库_#1.两数之和

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

网友评论

    本文标题:力扣刷题——1. 两数之和

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