题目:
给定一个整数数组 nums 和一个目标值 target,请在数组中找出两数之和等于 target 的位置下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
一、解法1,暴力方法, 2 个 for / while 循环。
时间复杂度:O(N^2)
import sys
if len(sys.argv) != 3:
print("Usage: python3 %s <nums> <target>" % (sys.argv[0]))
sys.exit()
numstr = sys.argv[1]
nums = numstr.strip().split(',')
out = []
length = len(nums)
target = float(sys.argv[2])
for i in range(length):
n = -1
while n < (length - 1):
n += 1
if n == i: continue
sums = float(nums[i]) + float(nums[n])
if sums == target:
out.append(i)
out.append(n)
break
if len(out) != 0:
print("The pos of the values is: ", out)
break
if len(out) == 0:
print("There is no values which could be added to the target!")
二、解法2:利用 hash 来存储另外一个数的差。
时间复杂度:O(N)
import sys
if len(sys.argv) != 3:
print("Usage: python3 %s <nums> <target>" % (sys.argv[0]))
sys.exit()
numstr = sys.argv[1]
nums = numstr.strip().split(',')
out = []
tmp = {}
length = len(nums)
target = float(sys.argv[2])
for i in range(length):
num = float(nums[i])
remain = target - num
if remain not in tmp:
tmp[num] = i
else:
out.append(tmp[remain])
out.append(i)
print("The pos of the values is: ", out)
break
if len(out) == 0:
print("There is no values which could be added to the target!")