python - 查找长度为 3 的总组合,使得总和可被给定数字整除且 i<j<k

标签 python algorithm

所以,我一直在尝试寻找该问题的最佳解决方案,但找不到小于 o(n3) 的解决方案。

问题陈述是:- 查找数组中三元组的总数,使得 a[i],a[j],a[k] 之和可被给定数字 d 和 i

我尝试了多种解决方案,但解决方案都达到了o(n3)。我需要一个可能小于 o(n3)

的解决方案

最佳答案

设 A 为长度为 N 的数字数组:

A = [1,2,3,4,5,6,7,8]

设 D 为除数

D = 4

可以使用额外的字典来降低复杂度 O(N^2),从而节省您迭代每对 (a[i],a[j]) 的数组。 辅助字典将在迭代 (i,j) 对之前构建,计数为 A[k] % D = X。 因此,对于任何对 A[i]、A[j],您可以通过从字典而不是循环中获取来判断存在多少个匹配的 A[k]。

下面是演示解决方案的 python 实现

T = 0 # Total possibilities
H = {} # counts all possible (A[k])%D = Key from index k

for k in range(2, len(A)):
  key = A[k]%D
  H[key] = H.get(key,0) + 1

for j in range(1, len(A)):
  if j >= 2:
    H[A[j]%D] -= 1 # when j increments it reduces options for A[k]
  for i in range(j):
    matching_val = (D - (A[i]+A[j]) % D ) % D
    to_add = H.get(matching_val, 0)
    T += to_add

print(T)

关于python - 查找长度为 3 的总组合,使得总和可被给定数字整除且 i<j<k,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75155648/

相关文章:

python - 有没有办法删除一列来执行 TSNE?

python - 为什么允许列表自行追加?

algorithm - 主要区别 - 顺序搜索算法

PHP - 如何判断多维数组中的所有相邻元素是否存在?

algorithm - 依赖解析算法

python - 什么时候/为什么我应该在 python 中使用结构库来打包和解包?

不同服务器上的 Python 3.5 dill pickling/unpickling : "KeyError: ' ClassType'"

python - 如何将 selenium webelement 转换为 python 中的字符串变量

java - UVA Online Judge 中的运行时错误

algorithm - 什么是次线性算法?