试用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
相关推荐
不会就选b21 分钟前
算法日常・每日刷题--<贪心>14
算法
野生技术架构师2 小时前
2026 Java 面试全套总结,八股 + 场景 + AI 相关面试考点
java·人工智能·面试
香吧香2 小时前
java服务异常日志只打印异常类型,没有堆栈定位分析
java·jvm·异常
qq_2518364573 小时前
AI 疾病自查功能SpringbootAI项目实战 · 技术实现文档
java·ai·ai编程
mmmmath_33 小时前
LeetCode.541.反转字符串II
数据结构·算法·leetcode
Navigator_Z3 小时前
LeetCode //MySQL - 1251. Average Selling Price
c语言·算法·leetcode
逆境不可逃3 小时前
Pi Agent 学习笔记:对话太长以后,如何压缩上下文
java
MetaLite3 小时前
JDK 8~26 核心特性一览:从 Stream 到 Scoped Values
java
wno7044 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端