【问题标题】:Three Sum HashMap Approach三和HashMap方法
【发布时间】:2020-05-22 01:34:30
【问题描述】:

您好,我不明白 k-loop 是如何恒定时间的。如果数组是 [4,4,4,4,4,4] 并且目标是 12,那么 number_table[4] = [0,1,2,3,4,5] 然后 k 循环将迭代五次不?问自己 i、j 和 k 是否都不同...这个视频似乎另有说法?video



def three_sum(nums, target):
  number_table = {}
  for i in range(len(nums)):
    if nums[i] in number_table.keys():
      number_table[nums[i]].append(i)
    else:
      number_table[nums[i]] = []
  for i in range(len(nums) - 1):
    for j in range(i + 1, len(nums)):
      partial_target = target - nums[i] - nums[j]
      for k in number_table[partial_target]:
        if len(set((i,j,k))) == 3:
          return (nums[i], nums[j], nums[k])
  return None

numbers = [4,4,4,4,4,4]
target = 12
three_sum(numbers, target)
print(three_sum(numbers,target))

【问题讨论】:

  • 我可以转录代码 :D
  • 错字在哪里?我会尽量让人们更容易编译和编写我一直在寻找运行时分析,但我会尽量让每个人都更容易回答

标签: python algorithm sorting hashmap hashtable


【解决方案1】:

当你到达最里面的循环时,有三种情况:

  • k == i ← 这只能出现一次,因为i 在列表中只能出现一次。
  • k == j ← 这只能出现一次,因为j 在列表中只能出现一次。
  • k != i and k != j ← 这只能发生一次,因为一旦发生你就会返回。 (注意,代码实际上检查ijk 中的所有三个 是否不同;但我们已经知道i != j 因为j 开始于i + 1 和上升,所以这相当于只检查k != i and k != j。)

所以我们最多尝试三个k 的值;并且 3 确实是一个常数,正如所愿。

【讨论】:

  • @ruakh 我想是时候更新你的个人资料了。它看起来是最新的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 2015-05-12
  • 2012-07-02
相关资源
最近更新 更多