https://leetcode.com/problems/two-sum/#/description
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
centv=target/2
posl={}
posr={}
for ind in xrange(len(nums)):
if nums[ind]==centv and 2*centv == target:
if centv in posl:
return [posl[centv], ind]
posl[centv] = ind
if nums[ind]<=centv : posl[nums[ind]] = ind
else : posr[nums[ind]] = ind
for k,v in posl.iteritems():
if target-k in posr:
return [v, posr[target-k]]
return []
思路: 两种情况,
1,a,b两个数相同,正好是目标数的一半,需特殊处理,第一次遇到,记录位置,第二次遇到,输出结果
2,两者不同,一个必定小于目标数的一半,另一个一定大于目标数一半,因此将候选数组按中间值分两部分,建表,遍历查表,完活