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 []
不错!!欢迎分享
页:
[1]