才接触算法,计划刷一个题记录一下。
题目:两数之和
给定一个整数数列,找出其中和为特定值的那两个数。
你可以假设每个输入都只会有一种答案,同样的元素不能被重用。
思路一
先对原数据进行排序,前后两个指针寻找target,找到后再在原数据中找索引值。
代码如下
def twosum(nums,target): #新的数组排序
res=[]
newnums = nums[:] #深拷贝,把原数据复制到newnums中
newnums.sort()
left = 0 #两个指针指向开头和结尾
right = len(newnums) - 1
while left < right :
if newnums[left] + newnums[right] == target :
for i in range(0,len(nums)):
res.append (i)
break
for i in range (len(nums)-1,-1,-1) :
if nums[i] == newnums[right] :
res.append(i)
break
res.sort()
break
elif newsnums[left] + newnums[right] < target :
left = left +1
elif newsnums[left] + newnums[right] > target :
right = right - 1
return (res[0],res[1])
思路二
哈希算法
代码如下
def twoSum(nums,target) :
dict = { } #字典储存数据和下标的关系
for i in range(len(nums)):
m = nums[i]
if target-m in dict :
return (dict[target-m]+1,i+1)
print(dict[target-m]+1,i+1)
dict[m] = i