题解 | #两数之和#
两数之和
http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
python 暴力法:
for i in range(len(numbers)): for j in range(i+1, len(numbers)): if numbers[i] + numbers[j] == target: return i+1, j+1
python 预先准备好map,由于数字可能重复出现所以map是{6:[1,4], 7:[2]}的形式,数组内表示数字出现的次数
map = {} for i, n in enumerate(numbers): if map.get(n): map[n].append(i+1) else: map[n] = [i+1] for n in numbers: if target - n in map: if map[n][0] != map[target-n][0]: return map[n][0], map[target-n][0] elif len(map[target-n]) > 1: return map[n][0], map[target-n][1]
python 在遍历中创建map(三个中的最优)
map = {} for i, n in enumerate(numbers): if map.get(target - n) is not None: return map[target-n]+1 , i+1 else: map[n] = i