华为OD机试 - 矩阵匹配(Java & JS & Python & C & C++)
题目:矩阵匹配
给定两个矩阵A和B,它们的大小都是 N * M,现在要求你找出 A 矩阵中的所有包含 B 矩阵的子矩阵,并输出这些子矩阵的左上角的位置和右下角的位置。
示例:
输入:
A = [
[1,2,3,4],[4,5,6,5],
[7,8,9,10],
[11,12,13,14]
]
B = [
[4,5,6],[10,11,12]
]
输出:
[{
"left-top": [1, 1],
"right-bottom": [2, 3]
},
{
"left-top": [2, 0],
"right-bottom": [3, 2]
}
]
解释:
在 A 矩阵中,有两个地方包含 B 矩阵:
- 左上角为 [1,1],右下角为 [2,3]
- 左上角为 [2,0],右下角为 [3,2]
注意:
- 矩阵以行和列的索引表示,索引从0开始。
- 矩阵A的行数大于等于B的行数,列数大于等于B的列数。
- 矩阵B的行和列都是不同的。
- 输出的结果需要按照左上角的行索引升序排列,行索引相同则按列索引升序排列。
提示:
- 时间复杂度应该是 O(NMT),其中 T 是 B 矩阵的面积。
- 空间复杂度应该是 O(T)。
解法:
public class Solution {
public int[][] findSubmatrix(int[][] A, int[][] B) {
// 实现代码
}
}
请你在下面提供实现这个算法的代码。在提交答案时,请确保你的代码是正确的,并且足够高效。
评论已关闭