【发布时间】:2018-03-30 06:56:15
【问题描述】:
我有一个N*N 2D 矩阵。我想找到每个集合 k*k 子网格的所有最大值。高效的算法应该是什么。例如,
N = 4, k = 2
0 1 3 1
5 2 1 4
2 3 0 7
输出:3, 4, 5
3 来自
1 3
2 1
4 来自
3 1
1 4
5 来自
5 2
2 3
一些子集没有被计算在内,因为它们有未设置的位,在 k*k 范围内为 0。例如,
1 4
0 7
【问题讨论】:
-
我假设您的第一个子网格中的
4应该是1? -
@NicoSchertler 谢谢,你是对的。已更新。
-
为什么简单的蛮力算法不适合你?在每个可能的 N*N 切片上迭代矩阵。如果它没有零,则找到它的最大值并附加到最大值列表中。
-
你检查过对应的一维问题吗(滑动窗口最大值/移动最大值)。这个想法是向/从二叉树推送/弹出元素,以允许您快速进行最大查询。类似的方法应该适用于 2D 案例。
-
@Prune,它可以用蛮力解决,但我想在 O(N^2) 中解决它,因为 k,N 可以超过 10000。如果存在,我正在寻找一个有效的解决方案.
标签: algorithm multidimensional-array 2d