力扣(LeetCode)算法题解:1.两数之和

简介: 力扣(LeetCode)算法题解:1.两数之和

(一)题目描述

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

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

来源:力扣(LeetCode

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

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

(二)输入、输出示例

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

(三)代码实现

方法1:

解题思路

1.最简单的方式,使用双重循环,比较两个数的值是否等于目标值target,若相等则获取当前两个元素的k。

2.注意:题目描述中要求数据中同一个元素不能使用两边,所以双重循环时,外层的i和内层的j的值相等时需要使用continue跳过。

代码实现

class Solution {
    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $suc = [];
        foreach($nums as $k_1 => $v_1){
            foreach ($nums as $k_2  => $v_2){
                if($k_2 == $k_1){
                    continue;
                }
                if($v_1 + $v_2 == $target){
                    $suc = [$k_1, $k_2];
                }
            }
        }
        return $suc;
    }
}

方法2:

解题思路

1.使用单层循环,减少双层的开支。

2.空间换时间。用目标值减去第一个元素的值作差,将差值存入新的变量found中,以差值为key,以第一个元素的下标值做value。如target=9,第一个元素值v=2(下标k=0),所以差值diff=7。将差值diff=7存入新变量found中,key等于差值7,value等于第一个元素的下标值0,结束对第一个元素的操作。 当单层循环判断第二个元素时,判断found中是否存在以第二个元素为k的值,若存在则找到元素。


代码实现

class Solution {
    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target) {
        $found = [];
        foreach ($nums as $k => $v) {
            $diff = $target - $v;
            if (!isset($found[$diff])) {
                $found[$v] = $k;
                continue;
            }
            return [$found[$diff], $k];
        }
    }
}

(四)性能分析

实现方案 运行时间 内存消耗 测试用例通过数/测试用例总数
方法一(双层循环) 2900ms 15.9 MB 29/29
方法二(单层循环) 12ms 15.8 MB 29/29


目录
相关文章
|
2月前
|
算法 容器
【算法】——双指针算法合集(力扣)
移动零,复写零,快乐数,盛最多水的容器,有效三角形的个数,和为s的两个数(查找总价格为目标值的两个商品 ),三数之和,四数之和
|
3月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
4月前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
4月前
|
索引
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
121 0
|
4月前
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
39 0
|
4月前
|
存储
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
75 0
|
4月前
|
C++
Leetcode第一题(两数之和)
这篇文章介绍了解决LeetCode第一题“两数之和”的两种方法:暴力法和哈希表法,并提供了相应的C++代码实现。
61 0
Leetcode第一题(两数之和)
|
4月前
|
存储 C++ 容器
【LeetCode 13】1.两数之和
【LeetCode 13】1.两数之和
27 0
|
4月前
|
算法 数据挖掘
【栈和队列】算法题 ---- 力扣(二)
【栈和队列】算法题 ---- 力扣
|
4月前
|
存储 算法
【栈和队列】算法题 ---- 力扣(一)
【栈和队列】算法题 ---- 力扣