两数之和:
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
代码python3:
class Solution: def twoSum(self, nums, target): ss=sorted(nums) i=0 j=len(ss)-1 while i!=j: while ss[i]+ss[j]<target: i=i+1 break while ss[i]+ss[j]>target: j=j-1 break if ss[i]+ss[j]==target: if ss[i]!=ss[j]: return sorted([nums.index(ss[i]),nums.index(ss[j])]) else: ii=nums.index(ss[i]) nums.pop(ii) jj=nums.index(ss[j])+1 return sorted([ii,jj])
这个方法比较符合自己一开始的想法,使用的是快排的基本思想,有一个重复数值的处理没充分考虑到。看了官方题解使用的是哈希函数来进行的处理,最快捷的一种方法是在hash表中边存储边比较:
def getSum(self, nums, target): nums_dict = {} for i_dx, i_value in enumerate(nums): ic_value = target - i_value if ic_value in nums_dict.keys(): return [nums_dict[ic_value], i_dx] nums_dict[i_value] = i_dx
下面的这段代码与自己开始的想法相比较,代码量有了很大的减少,但是也算是殊途同归,整个方法更加简洁明了,值得借鉴。