【问题标题】:Maximums of all 2D subarrays of size A x B所有大小为 A x B 的 2D 子数组的最大值
【发布时间】:2020-03-15 19:36:58
【问题描述】:

假设我有一个大小为N x M 的二维数组。我想打印出每个大小为A x B的子数组的最大值sum

例如,假设这个 3 x 3 数组、A = 2B = 2

Input:
1 2 3
4 5 6
7 8 9

输出应该是:

Output:
from (0, 0) to (1, 1): 5
from (0, 1) to (1, 2): 6
from (1, 0) to (2, 1): 8
from (1, 1) to (2, 2): 9

Answer: 5 + 6 + 8 + 9 = 28

我尝试过使用 2D 稀疏表,但速度肯定不够快。如果可能的话,我正在努力实现O(N * M)

【问题讨论】:

    标签: algorithm optimization data-structures


    【解决方案1】:

    This answer 描述了一种扩展一维(数组)算法以查找maximum over a sliding window 的方法(请阅读方法 3,即使用双端队列的方法)。本质上:

    1. 找出每个水平序列B个元素的最大值,有效地将矩阵减少到N - B + 1列。
    2. A元素的每个垂直序列的最大值,有效地将矩阵减少到M - A + 1行。
    3. 其余元素是您的窗口最大值,只需将它们相加即可。

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-20
      相关资源
      最近更新 更多