OJ: Two Sum

来源:互联网 发布:淘宝的海外直购在哪 编辑:程序博客网 时间:2024/06/10 17:22

题意


题意就是给出一数字列表,找出两个数,使俩数和等于给定的一个整数,求出这俩数的下标。

比如:
Input: numbers={2, 7, 11, 15}, target=9·
Output: index1=1, index2=2

思路


解题的时候,用的是 HashTable 思路很简单,就是首先将数组中所有的数插入到哈希表内,然后再在哈希表内查找即可。PS:数据量比较大,O(n2) 的复杂度会TLE;后来看到有人直接使用字典存储,试了一次果然也可以AC–跪了啊。。代码量差太多了。


代码


首先是 HashTable 的代码

MAX = 200003hashTable =[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%MAXdef insert(p):    k = ToHash(p)    while mark[k] and hashTable[k]!=p:        k +=1        if k>=MAX:            k -= MAX    hashTable[k]=p    mark[k]+=1def find(p):    k = ToHash(p)    while mark[k] and hashTable[k]!=p:        k+=1        if k>=MAX:            k-= MAX    return mark[k]flag=0nums =[0,4,3,0]target=0for 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        breakprint 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=0for i,num in enumerate(nums):    if target - num in m:        print [m[target - num],i + 1]    m[num] = i + 1
0 0
原创粉丝点击