重构哈希表解决方案twoSum问题

时间:2019-03-22 04:05:26

标签: python-3.x algorithm

我尽最大努力解决leetcode中的twoSum问题

  

给出一个整数数组,返回两个数字的指数,以便它们加起来成为一个特定的目标。

     

您可以假设每个输入将具有恰好一种解决方案,并且您可能不会两次使用 same 元素。

     

示例:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

计划:

1)蛮力迭代len(nums)O(n)
2)搜索目标-具有哈希表O(1)的num [i]

实施

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        nums_d = {}
        for i in range(len(nums)):
            nums_d.setdefault(nums[i], []).append(i)

        for i in range(len(nums)):
            sub_target = target - nums[i]
            nums_d[nums[i]].pop(0) #remove the fixer
            result = nums_d.get(sub_target)#hash table to search 

            if result: 
                return [i, result[0]]
        return []

我努力解决这个问题,但发现答案可以接受,但未通过60分。

  

运行时间:60毫秒,比“两加总和”的Python3在线提交的46.66%快。   内存使用量:16.1 MB,不到Python 3在线提交的“两个和”的5.08%。

我想重构代码,以便至少达到60%以上的速度。

能否请您提供提示?

1 个答案:

答案 0 :(得分:0)

LeetCode问题中“解决方案”选项卡中的方法3似乎比80%快。以下是一些不完整的代码供您填写:

def twoSum(self, nums: List[int], target: int) -> List[int]:
  map = # ???
  for i in range(len(nums)):
    complement = # ???
    if complement in map:
      return # ???
    map[nums[i]] = # ???