Two Sum @ LeetCode (Python)
kitt
posted @ 2014年1月29日 13:51
in LeetCode
, 6608 阅读
经Derek提醒,可用dict来存每个integer的初始位置。需注意num=[0,4,3,0], target=0这种两加数相等的情况。
class Solution: # @return a tuple, (index1, index2) def twoSum(self, num, target): lenNum = len(num) d = {} # key is integers in the given array, value is a list of their original index, one key may have 1 or 2 index for i in xrange(lenNum): d[num[i]] = [i + 1] if num[i] not in d else d[num[i]] + [i + 1] for i in num: if target - i in d: if i == target - i: if len(d[i]) == 2: return (d[i][0], d[i][1]) else: return (d[i][0], d[target - i][0]) if d[i][0] < d[target - i][0] else (d[target - i][0], d[i][0])
2014年3月29日 05:09
用dict做,O(n)即可
2014年3月29日 16:56
@Derek: 多谢 :)
2014年6月03日 17:34
条件
if len(d[i]) == 2:
应该写成大于1或者大于等于2,因为有可能有三个或者以上重复元素
2014年6月03日 17:42
还有后面 不用对比d[i][0]和d[target-i][0]的大小,因为d[i][0]一定更小。
因为建d的时候,d[i]就按照顺序建的,第二个循环里的i也是按照先后顺序遍历。
还有for循环里index的时候用i, 元素的时候尽量换成别的。
2014年8月27日 05:52
我的用了四行。
class Solution:
# @return a tuple, (index1, index2)
def twoSum(self, num, target):
d = {}
for i in range(len(num)):
if target - num[i] in d: return (d[target - num[i]]+1, i+1)
else: d[num[i]] = i