题解 | #两数之和#
两数之和
http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
暴力法
从逐个遍历,不解释。
但python直接暴力***超时,在循环中做个小判断,如果比目标大10,就跳过,少一层循环。
class Solution:
def twoSum(self , numbers: List[int], target: int) -> List[int]:
isok = 0
length = len(numbers)
for i in range(length):
if numbers[i] - 10 >= target:
continue
for j in range(i+1, length):
if numbers[i] + numbers[j] == target :
isok = 1
break
if isok :
break
return [i+1,j+1]
伪·hashMap法
借用java中hashMap法的思想,将列表转换到一个set中(去重),再一个个试(if target-num in set
)是否有符合条件的数字。
class Solution:
def twoSum(self , numbers: List[int], target: int) -> List[int]:
num_map = set(numbers)
for i in num_map:
if target-i in num_map:
break
a = numbers.index(i)
if i == target-i :
b = numbers.index(target-i,a+1)
return [a+1,b+1]
else :
b = numbers.index(target-i)
su = [a+1,b+1]
su.sort()
return su