Word Break (C++)
Remove Duplicates from Sorted List (Python)

Two Sum @ LeetCode (Python)

kitt posted @ 2014年1月29日 13:51 in LeetCode , 6576 阅读

经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])
Avatar_small
Derek 说:
2014年3月29日 05:09

用dict做,O(n)即可

Avatar_small
TTc 说:
2014年6月03日 17:34

条件
if len(d[i]) == 2:
应该写成大于1或者大于等于2,因为有可能有三个或者以上重复元素

Avatar_small
TTc 说:
2014年6月03日 17:42

还有后面 不用对比d[i][0]和d[target-i][0]的大小,因为d[i][0]一定更小。
因为建d的时候,d[i]就按照顺序建的,第二个循环里的i也是按照先后顺序遍历。
还有for循环里index的时候用i, 元素的时候尽量换成别的。

Avatar_small
yzl232 说:
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


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter