试用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
相关推荐
jktantan8 小时前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
独泪了无痕17 小时前
探索Pinyin4j-Java中的拼音转换利器
java·后端
道尔柯南18 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
kingx319 小时前
Bugku 3122 谷歌小恐龙题解:纯离线逆向 Vault 的 AES-GCM 加密资源(附 Python 解密器)
java·逆向·ctf·bugku·aes-gcm
Dream it possible!21 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
DevOpenClub21 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
心抵鹊21 小时前
算法之双指针系列(一)
算法·leetcode
十二1 天前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
露天赏雪1 天前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
小此方1 天前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划