给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
最简单的想法,两个for
def func(nums,target):
l = len(nums)
for i in range(l-1):
for j in range(i+1,l):
if nums[i]+nums[j] == target:
return [i,j]
此题有一种解法是运用哈希表,将数组的值和索引分别存在哈希表的key和value中。只需要一次for循环,先判断目标值target减去当前遍历数组的值是否在哈希表中,如果在的话这两个数已经找到,及那个两个数的索引值添加在结果集中。如果不存在,就将当前数组的值添加在哈希表中。
def func(nums,target):
l = len(nums)
for i in range(l-1):
tmp = nums.copy()
c = tmp.pop(i)
if (target - nums[i]) in tmp.remove(nums[i]):
return [i,c]
第三种,如果可以引用numpy包,算了感觉好麻烦.想法是:目标和数组做差,求助差值数组和原数组的真值索引,
def func(nums,target):
import numpy as np
a = np.array(nums)
return np.where(np.sort(a)==np.sort([2, 7, 11, 15]),1,1)...未完 计算量很大