蓝色秘法鞋

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

 


posted on 2017-12-07 21:40  蓝色秘法鞋  阅读(157)  评论(0)    收藏  举报

导航