题意
题意就是给出一数字列表,找出两个数,使俩数和等于给定的一个整数,求出这俩数的下标。
比如:
Input: numbers={2, 7, 11, 15}, target=9·
Output: index1=1, index2=2
思路
解题的时候,用的是 HashTable
思路很简单,就是首先将数组中所有的数插入到哈希表内,然后再在哈希表内查找即可。PS:数据量比较大,
O(n2)
的复杂度会TLE;后来看到有人直接使用字典存储,试了一次果然也可以AC–跪了啊。。代码量差太多了。
代码
首先是 HashTable
的代码
MAX = 200003
hashTable =[0 for i in range(MAX)]
mark =[0 for i in range(MAX)]
def ToHash(p):
if p<0:
return (p%MAX+MAX)%MAX
return p%MAX
def insert(p):
k = ToHash(p)
while mark[k] and hashTable[k]!=p:
k +=1
if k>=MAX:
k -= MAX
hashTable[k]=p
mark[k]+=1
def find(p):
k = ToHash(p)
while mark[k] and hashTable[k]!=p:
k+=1
if k>=MAX:
k-= MAX
return mark[k]
flag=0
nums =[0,4,3,0]
target=0
for i in nums:
insert(i)
for i in nums:
if find(target-i):
if i*2==target:
if mark[i]<2:
continue
else:
flag =1
break
break
print mark[i]
print [nums.index(i)+1,nums.index(target-i)+1] if flag==0 else [nums.index(i)+1,len(nums)-nums[::-1].index(i)]
简洁的使用字典: 有点dp的感觉
m = {}
nums=[0,3,4,0]
target=0
for i,num in enumerate(nums):
if target - num in m:
print [m[target - num],i + 1]
m[num] = i + 1