Bootstrap

华为OD机试 - 最小矩阵宽度 - 滑动窗口(Java 2024 E卷 200分)

一、题目描述

给定一个矩阵,包含 N * M 个整数,和一个包含 K 个整数的数组。

现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。

二、输入描述

第一行输入两个正整数 N,M,表示矩阵大小。

接下来 N 行 M 列表示矩阵内容。

下一行包含一个正整数 K。

下一行包含 K 个整数,表示所需包含的数组,K 个整数可能存在重复数字。

所有输入数据小于 1000。

三、输出描述

输出包含一个整数,表示满足要求子矩阵的最小宽度,若找不到,输出 -1。

四、测试用例

测试用例1:

1、输入

2 5
1 2 2 3 1
2 3 2 3 2
3
1 2 3

2、输出

2

3、说明

在这个 2x5 的矩阵中,需要找到一个包含所有数字 1, 2, 3 的最小宽度子矩阵。

矩阵第 0, 3 列包含了 1, 2, 3,矩阵第 3, 4 列也包含了 1, 2, 3。

因此,最小宽度为 2。

测试用例2:

1、输入

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。