algorithm - 计算给定数组中子数组的数量,其平均值为 k
问题描述
给定一个整数数组 a 和一个整数 k,我们想设计一种算法来计算子数组的数量,该子数组的平均值为 k。最幼稚的方法是遍历所有可能的子数组并计算相应的平均值。这种简单方法的时间复杂度是 O(n^2),其中 $n$ 是 a 的长度。我想知道是否有可能比 O(n^2) 做得更好。
通常对于此类问题,将前缀和与哈希图一起使用,但这种技术似乎不适用于这里。
解决方案
考虑一个前缀和数组,称之为a
。
你想找到所有这样(i, j)
的对(a[j]-a[i])/(j-i) == k
。
现在看手:
(a[j]-a[i])/(j-i) == k
a[j]-a[i] == k*(j-i)
a[j]-a[i] == k*j-k*i
a[j]-k*j == a[i]-k*i
因此,如果k*j
从j
前缀和数组的第 th 个元素中减去,则剩下的任务是计算相同的对。
推荐阅读
- c++ - 计算蹦床钩的 JMP 指令地址
- python - Pythonic方法来获取列表中每个元素与其他元素的减法列表?
- python - MLFlow SparkTrials maxNumConcurrentTasks([]) 不存在
- mysql - SQL 仅获取重复行中的较早日期
- python - 在 Python/Tensorflow 中:如何将 2D 数组的字符串表示形式从文本文件转换为 TF 可以使用的东西
- javascript - Jest 精确对象匹配
- mysql - 查询 SQL Group By 不根据第一个元素进行分组
- mysql - CTE DELETE 不可更新
- java - 关闭应用程序后,哈希图中的数据不保存
- python - 更改目录并执行命令 - Python