Two Sum
我的智障思路:
排序-遍历两次
找到两个元素
效率十分低下,代码记录如下:
1 class Solution: 2 def twoSum(self, nums, target): 3 """ 4 :type nums: List[int] 5 :type target: int 6 :rtype: List[int] 7 """ 8 y=sorted(nums) 9 flag = 1 10 for i in range(len(y)): 11 if flag!=0: 12 for j in range(i+1,len(y)): 13 if y[i]+y[j]==target: 14 flag=0 15 o=y[i] 16 p=y[j] 17 break 18 else: 19 break 20 for m in range(len(nums)): 21 if o==nums[m]: 22 o=m 23 flag=1 24 break 25 elif p==nums[m]: 26 p=m 27 flag=2 28 break 29 if flag==1: 30 for n in range(o+1,len(nums)): 31 if p==nums[n]: 32 p=n 33 return o,p 34 elif flag==2: 35 for n in range(p+1,len(nums)): 36 if o==nums[n]: 37 o=n 38 return p,n
查询讨论区,发现可以利用dict很好的解决这个问题,
1 class Solution(object): 2 def twoSum(self, nums, target): 3 if len(nums) <= 1: 4 return False 5 buff_dict = {} 6 for i in range(len(nums)): 7 if nums[i] in buff_dict: 8 return [buff_dict[nums[i]], i] 9 else: 10 buff_dict[target - nums[i]] = i
将第i个元素nums[i]储存为i,放在列表(target - nums[])位置
只需要遍历两次,但是如果对于nums=[1,1,5,6,7],target=7时
应该输出[0,3],但是算法第二个1会将第一个1覆盖掉 输出[1,3]
稍作修改:
1 class Solution(object): 2 def twoSum(self, nums, target): 3 if len(nums) <= 1: 4 return False 5 buff_dict = {} 6 for i in range(len(nums)): 7 if nums[i] in buff_dict: 8 return [buff_dict[nums[i]], i] 9 elif target - nums[i] not in buff_dict: 10 buff_dict[target - nums[i]] = i
浙公网安备 33010602011771号