问题出处:两数之和
题目描述
给定一个整数数组nums
和一个目标值target
,请你在该数组中找出和为目标值的那两个
整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解题思路
- 比较笨的方法,两个for循环直接遍历
遍历两边数组即可,如果有两个数等于target,则返回两个这两个数的索引
class Solution():
def twoSum(self, nums, target):
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if target-nums[i] == nums[j]:
return [i, j]
- 一个for循环,直接判断target-nums[i]是否在nums里,不过要判断两个数的index是否一样,避免[3, 3]的情况
class Solution():
def twoSum(self, nums, target):
for i in range(len(nums)):
difference = target - nums[i]
if difference in nums:
j = nums.index(difference)
if i == j:
continue
else:
return [i, j]
- 利用dict的key、value进行解答(参考后面答案的)
步骤如下:
- 创建空的
dict
- 遍历
nums
- 判断
dict
里的key
有没有和nums[i]
相等的,没有就将target - nums[i]
作为key
,i
作为value
存到dict
里 - 如果有的相等话,就返回
i
和dict [nums[i]]
class Solution():
def twoSum(self, nums, target):
n = len(nums)
dict = {}
for i in range(n):
if nums[i] in dict:
return [dict [nums[i]], i]
else:
dict [ target - nums[i]] = i