试用leetcode之典中典 二数之和问题

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

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。

你可以按任意顺序返回答案。

示例 1:

复制代码
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

复制代码
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

复制代码
输入:nums = [3,3], target = 6
输出:[0,1]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

进阶: 你可以想出一个时间复杂度小于 O(n2) 的算法吗?

解答:

先来一个我不动脑子的解答,用了2个for循环...

暴力双循环写法

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for x in nums:
            for y in nums:
                if x + y == target and x !=y:
                    print (x,y)
                    return [nums.index(x),nums.index(y)]
        return

常规解答:

使用dict减少list的 in/index 的性能损耗

python 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        seen = {}  # 字典,键为数值,值为该数值在数组中的索引
        for i, num in enumerate(nums):
            result=target-num
            if result in seen:          # 检查 result 是否已经在字典中
                return [seen[result], i]  # 返回之前索引和当前索引
            seen[num] = i                   # 将当前数值及其索引存入字典
        return
相关推荐
Jerry1 小时前
LeetCode 226. 翻转二叉树
算法
想做小南娘,发现自己是女生喵3 小时前
【无标题】
数据结构·算法
懒鸟一枚4 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
Kx_Triumphs4 小时前
HDU4348 To the moon(主席树区间修改模板)
算法·题解
旖-旎5 小时前
《LeetCode647 回文子串 || LeetCode 5 最长回文子串》
c++·算法·leetcode·动态规划·哈希算法
我命由我123455 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑6 小时前
Sentinel安装
java·后端·微服务
轻颂呀6 小时前
约瑟夫环问题
算法