当前位置: 首页 > 知识库问答 >
问题:

重构二和问题的哈希表解决方案

百里朝
2023-03-14

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

给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。

您可以假设每个输入都有一个精确的解决方案,并且您可以不使用相同的元素两次。

例子:

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)搜索target-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.1MB,不到Python3在线提交两次总和的5.08%。

我想重构代码,以便实现至少超过60%的速度。

你能提供一些提示吗?

共有1个答案

笪涛
2023-03-14

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]] = # ???
 类似资料:
  • 1. 数组中两个数的和为给定值 2. 判断数组是否含有重复元素 3. 最长和谐序列 4. 最长连续序列 哈希表使用 O(N) 空间复杂度存储数据,并且以 O(1) 时间复杂度求解问题。 Java 中的 HashSet 用于存储一个集合,可以查找元素是否在集合中。如果元素有穷,并且范围不大,那么可以用一个布尔数组来存储一个元素是否存在。例如对于只有小写字符的元素,就可以用一个长度为 26 的布尔数组

  • 问题内容: 当大小超过maxthreshold值时,如何在哈希表或哈希表中进行重新哈希处理? 是否所有对都已复制到新的存储桶阵列中? 编辑: 重新哈希后,同一存储桶(位于链接列表中)中的元素会发生什么情况?我的意思是说,他们在重新哈希处理后会留在同一个桶中吗? 问题答案: 问题中的最大阈值称为负载系数。 建议负载系数约为0.75。负载因子定义为(m / n),其中n是哈希表的总大小,m是在需要增加

  • 我知道在stackoverflow中已经提出了一些相关的问题。然而,这个问题更多地与3种方法之间的性能差异有关。 问题是:给定一个只包含正整数的非空数组,找出该数组是否可以分成两个子集,使得两个子集的元素之和相等。https://leetcode.com/problems/partition-equal-subset-sum/ 即[1,5,11,5] =真,[1,5,9] =假 通过解决这个问题,

  • 我正在使用Google Maps API,觉得除了大量的语句之外,还有一种更好的方法来搜索全景图像。我认为使用外部哈希表会更有效,更容易维护。每个图像都有一个唯一的,我可以定义它。阅读哈希表,我相信我的说法是正确的,我可以做一个表和完善的函数,以获得我需要的数据,在恒定的时间。有没有一个很好的资源如何构建这个?我对哈希一点经验都没有。 我的逻辑是这样的:每个图像都以的形式保存在一个目录中,其中是一

  • 问题内容: 我必须在我的HashMultiMap中存储超过1亿个键值(键可以具有多个值)。任何人都可以帮助我在存储和搜索方面更快的一个: 1)伯克利DB 2)东京内阁 3)H2 4)缓存 5)或其他 还有一点,那些性能与内存中的哈希映射大致相同吗?一点指导会更有帮助。谢谢。 注意:关于任何一个的信息也是有帮助的。 问题答案: 我建议Redis。它比其他结构更像是一种数据结构存储(例如,它支持地图和

  • 在密码散列方面,我有点像n00b,所以对我来说很简单。基本上,我已经整理了一些代码,首先清理用户在注册时输入的字符串。一旦完成,就会生成随机盐。然后将密码附加到salt: 然后,我使用sha256对密码进行哈希处理,然后继续将用户插入数据库,这似乎都正常工作: 然后,当涉及到用户登录时,我再次清理用户输入的字符串,从数据库中获取salt并将其分配给变量,然后将密码附加到该变量,如下所示: 然后,像