给定一个大小为 N×M 的矩阵,矩阵中的每个元素是一个整数。另外给定一个包含 K 个整数的数组。要求在这个矩阵中找到一个宽度最小的子矩阵,使得这个子矩阵包含数组中所有的整数。如果找不到这样的子矩阵,输出 −1。
这道题的核心思路是通过滑动窗口在矩阵的列上寻找一个最小的区间,使得该区间内的列包含目标数组中的所有整数。具体步骤是:首先统计目标数组中每个整数的频率,然后遍历矩阵的列,使用滑动窗口动态维护一个窗口内的整数频率,当窗口满足包含所有目标整数时,尝试缩小窗口以找到最小宽度。如果找不到满足条件的窗口,则返回 -1。
给定一个矩阵,包含 N∗M 个整数,和一个包含 K 个整数的数组。
现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。
第一行输入两个正整数 N,M,表示矩阵大小。
接下来 N 行 M 列表示矩阵内容。
下一行包含一个正整数 K。
下一行包含 K 个整数,表示所需包含的数组,K 个整数可能存在重复数字。
所有输入数据小于 1000。
输出包含一个整数,表示满足要求子矩阵的最小宽度,若找不到,输出 −1 。
输入
2 5
1 2 2 3 1
2 3 2 3 2
3
1 2 3
输出
2
说明
矩阵第0、3列包含了1,2,3,矩阵第3,4列包含了1,2,3
输入
2 5
1 2 2 3 1
1 3 2 3 4
3
1 1 4
输出
5
说明
矩阵第1、2、3、4、5列包含了1、1、4