题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
这是本人在刷力扣,所用到的方法。前面的两种方法总是会遇到运行时间超时的苦恼,知道方法三的出现。
方法1:双循环遍历法
class Solution():
@staticmethod
def twoSum(nums, target):
if len(nums) < 2:
return
for i in range(0, len(nums) - 1):
for j in range(i + 1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
nums = [2, 7, 11, 15]
target = 9
numbers = Solution.twoSum(nums, target)
print(numbers)
输出结果为:
[0, 1]
Running time: 2.9606447415791367e-05 Seconds
方法2:没有名字(——)
class Solution():
@staticmethod
def twoSum(nums, target):
if len(nums) <= 2:
return [0, 1]
for i in range(1, len(nums)):
temp = target - nums[i]
num = nums[:i]
if temp in num:
temp_1 = num.index(temp)
return [temp_1, i]
nums = [2, 7, 11, 15]
target = 9
numbers = Solution.twoSum(nums, target)
print(numbers)
输出结果:
[0, 1]
Running time: 4.460704743979233e-05 Seconds
方法三:字典法(这是最快的方法了,本人掌握的)
class Solution():
@staticmethod
def twoSum(nums, target):
hashmap={}
for ind,num in enumerate(nums):
hashmap[num] = ind
for i,num in enumerate(nums):
j = hashmap.get(target - num)
if j is not None and i!=j:
return [i,j]
nums = [2, 7, 11, 15]
target = 9
numbers = Solution.twoSum(nums, target)
print(numbers)
输出结果:
[0, 1]
Running time: 4.3817542175371226e-05 Seconds