一、题目描述:
给定一个整数数组 nums 和一个整数目标值 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]
1.暴力解法
思路
第一个for遍历数组得到数字下标i;
第二个for从i遍历其他数得到其他下标(大于i)的j;
if判断是否是我们想的数target,若是,返回下标,不是,继续循环
# 先实现两层for
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
n = len(nums) # 为了方便定义的n
for i in range(n): # 遍历数组得到数字下标i
for j in range(i + 1, n): # i+1是为了不让i和j重复
# 加入判断条件,列表和下标结合得到两个具体的num,判断是否为要的数target
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
n = len(nums)
for i in range(n):
for j in range(i + 1, n):
if nums[i] + nums[j] == target: #if判断是否是我们想的数target
return [i, j] # 若是,返回下标
return [] #若遍历完了都没输出,那就输出[]
2.哈希表
思路
先定义一个字典变量(hashtable),并将列表(nums)里面的下标(i)和数字(num)通过enumerate函数取出
判断我们要的值(target)减去取出的值(num)是否在字典(hashtable)里,若在,返回target-num的下标(hashtable[target-num])和当前通过enumerate函数取出的下标(i)
将刚刚取出的列表(nums)里面的下标和数字存到字典(hashtable)里
#先定义字典,取下标和数字并且存到字典中
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashtable = dict() #定义字典
for i, num in enumerate(nums): # 将列表(nums)里面的下标(i)和数字(num)通过enumerate函数取出
hashtable[nums[i]] = i # 将刚刚取出的列表(nums)里面的下标和数字存到字典(hashtable)里
# 再判断我们要的值(target)减去取出的值(num)是否在字典(hashtable)里
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashtable = dict()
for i, num in enumerate(nums):
if target-num in hashtable: # 判断我们要的值(target)减去取出的值(num)是否在字典(hashtable)里
return [hashtable[target-num], i] # 若在,返回target-num的下标(hashtable[target-num])和当前通过enumerate函数取出的下标(i)
hashtable[nums[i]] = i
return [] #若遍历完了都没输出,那就输出[]