试用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
相关推荐
手写码匠1 分钟前
华为云Flexus+DeepSeek征文|Dify 多智能体协同编排实战:R1 规划 + V3 执行,构建企业 Agent 团队
人工智能·深度学习·算法·aigc
山荷枝1 小时前
Java学习第十天
java·学习
晓天衡宇•评测社区1 小时前
FSR-Bench 前沿科学推理榜单发布:GPT-5.5 居首,“会推理”未必“能答对”
算法
matlabgoodboy1 小时前
计算机毕设代做|Java Python Matlab APP 全套开发设计
java·python·课程设计
程序喵大人2 小时前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法
hanlin032 小时前
动态规划专练:力扣第121、122题
笔记·算法·leetcode
To_OC2 小时前
LC 74 搜索二维矩阵:换皮的二分查找,我居然一开始没看出来
javascript·算法·leetcode
文心快码BaiduComate2 小时前
文心快码荣获“中国优秀软件产品”,实力再获国家级认可
算法·代码规范
玖玥拾2 小时前
LeetCode 189 轮转数组
算法·leetcode
程序员雷欧2 小时前
环形缓冲区深度解析:从基础原理到Disruptor源码的全面剖析
java