Gnomeshgh 发表于 2025-7-16 17:49:26

1. 两数之和

本帖最后由 Gnomeshgh 于 2025-7-16 18:07 编辑

一、题目描述

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

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

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



示例 1:

输入:nums = , target = 9
输出:
解释:因为 nums + nums == 9 ,返回 。
示例 2:

输入:nums = , target = 6
输出:
示例 3:

输入:nums = , target = 6
输出:


提示:

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


二、解题思路

(一)暴力解法


最直观的方法就是穷举,对每一个数据进行两两相加,判断是否与目标值相等,相等则返回该下标。

class Solution:
    def twoSum(self, nums: List, target: int) -> List:
      # 第一个下标从0到倒数第二个
      for i in range(len(nums) - 1):
            # 第二个下标从i + 1 到倒数第一个
            for j in range(i + 1 , len(nums)):
                # 与目标值一致则直接返回
                if nums + nums == target:
                  return
      # 没有符合的就返回空
      return []
简单地优化一下,遍历的目的就是找到两数相加等于目标值,已知目标值,以及初始下标,相减即可得到需要找的值,可以直接用python中的count直接判断是否大于0即可,大于0则说明存在。还需注意的是一个值不能用两次,所以还要进行是否是自身的判断。

class Solution:
    def twoSum(self, nums: List, target: int) -> List:
      left = 0 # 记录起始下标
      right = len(nums) # 记录终止下标
      while left < right: # 当超出范围时结束循环
            if nums.count(target - nums) != 0: # 查询该列表中是否有相配对的数,有则不为0
                if left != nums.index(target - nums):# 若这个数不是它本身则说明,找到了相配对的数
                  return )]# 返回其对应得下标
            left = left + 1 # 没有符合得就下标加1
      return [] # 都没有符合得就返回空列表
(二)哈希表法

哈希表非常适合查找类的题目,这个题目可以用思路二进行查找转换。
首先是创建哈希表,可以用enumerate进行创建,这样可以使值和下标同时存在且可以访问


class Solution:
    def twoSum(self, nums: List, target: int) -> List:
      # 创建一个空集合,用于哈利表的存储
      hash_map= {}
      # enumerate(nums),会转换为二元组,i取下标,num取值
      for i,num in enumerate(nums):
            # 判断目标值是否存在于哈希表中
            if target - num in hash_map:
                return ]
            # 不存在则就向哈希表中添加元素,此时键为num,值为i,这样方便返回下标
            hash_map = i
      # 都不存在则返回空
      return []

不二如是 发表于 2025-7-16 19:01:16

不错!!欢迎分享
页: [1]
查看完整版本: 1. 两数之和