华为机试题-最小矩阵

题目

给定一个矩阵,包含 N∗M 个整数,和一个包含 K 个整数的数组。现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。
输入描述:
第一行输入两个正整数N,M,表示矩阵大小。
接下来 N 行 M 列表示矩阵内容。下一行包含一个正整数 K 。下一行包含
K 个整数,表示所需包含的数组,K个整数可能存在重复数字所有输入数据小于 1000 。
输出描述:
输出包含一个整数,表示满足要求子矩阵的最小宽度,若找不到,输出-1.
补充说明:
示例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

参考代码
package RealTest;/*** @ClassName jvzhen* @Description TODO* @Author 21916* @Date 2024/3/18 20:50*/import java.util.*;public class jvzhen{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt(); // 读取矩阵的行数int M = scanner.nextInt(); // 读取矩阵的列数int[][] matrix = new int[N][M]; // 创建矩阵数组for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {matrix[i][j] = scanner.nextInt(); // 读取矩阵元素}}int K = scanner.nextInt(); // 读取目标数组的长度int[] target = new int[K]; // 创建目标数组for (int i = 0; i < K; i++) {target[i] = scanner.nextInt(); // 读取目标数组元素}int result = findMinWidth(matrix, target); // 调用函数计算最小宽度System.out.println(result); // 输出结果}public static int findMinWidth(int[][] matrix, int[] target) {int N = matrix.length; // 矩阵的行数int M = matrix[0].length; // 矩阵的列数int minLen = Integer.MAX_VALUE; // 初始化最小宽度为最大值for (int left = 0; left < M; left++) { // 遍历矩阵的每一列作为子矩阵的左边界Map<Integer, Integer> targetMap = new HashMap<>(); // 用于记录目标数组中每个元素出现的次数for (int num : target) {targetMap.put(num, targetMap.getOrDefault(num, 0) + 1); // 统计目标数组中每个元素的出现次数}int count = target.length; // 初始化目标数组中元素的个数for (int right = left; right < M; right++) { // 从左边界开始向右遍历,作为子矩阵的右边界for (int i = 0; i < N; i++) { // 遍历每一行int num = matrix[i][right]; // 获取当前位置的数值if (targetMap.containsKey(num)) { // 如果当前数值在目标数组中targetMap.put(num, targetMap.get(num) - 1); // 将该数值在targetMap中的计数减1if (targetMap.get(num) == 0) { // 如果该数值的计数减为0count--; // 目标数组元素个数减1}}}if (count == 0) { // 如果目标数组中所有元素都在子矩阵中出现minLen = Math.min(minLen, right - left + 1); // 更新最小宽度break;}}}return minLen == Integer.MAX_VALUE ? -1 : minLen; // 返回最小宽度,若找不到,返回-1}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/754068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯数论基础知识Java代码

数论 欧几里得算法求最大公约数 import java.util.*; class Main {public static void main(String[] args){Scanner sc new Scanner(System.in);int asc.nextInt();int bsc.nextInt();System.out.print(gcd(a,b));}public static int gcd(int a,int b){return b!0 ? gcd(b…

WebServer -- 八股(终章)

&#x1f442; Honey Honey - 孙燕姿 - 单曲 - 网易云音乐 目录 &#x1f33c;触类旁通 &#x1f6a9;线程 && 进程 线程与进程的区别 多线程锁是什么 进程 / 线程 / 协程 的区别 线程切换时&#xff0c;需要切换的状态 &#x1f382;并发 && 并行 并…

Java基础夯实——八股文【2024面试题案例代码】

1、Java当中的基本数据类型 Java中常见的数据类型及其对应的字节长度和取值范围如下&#xff1a; byte&#xff1a;1字节&#xff0c;取值范围为-128到127。short&#xff1a;2字节&#xff0c;取值范围为-32,768到32,767。int&#xff1a;4字节&#xff0c;取值范围为-2,147…

【数据挖掘】练习2:数据管理2

课后作业2&#xff1a;数据管理2 一&#xff1a;上机实验2 # 编写函数stat&#xff0c;要求该函数同时计算均值&#xff0c;最大值&#xff0c;最小值&#xff0c;标准差&#xff0c;峰度和偏度。 install.packages("timeDate") library(timeDate) stat <- func…

Swagger Array 使用指南:详解与实践

Swagger 允许开发者定义 API 的路径、请求参数、响应和其他相关信息&#xff0c;以便生成可读性较高的文档和自动生成客户端代码。而 Array &#xff08;数组&#xff09;是一种常见的数据结构&#xff0c;用于存储和组织多个相同类型的数据元素。数组可以有不同的维度和大小&a…

windows平台Qt5连接wifi

文章目录 Windows WLAN API的使用代码中的关键点代码WifiHelper类的功能注意事项Windows WLAN API的使用 WlanOpenHandle:打开一个WLAN客户端句柄,用于后续的WLAN操作。WlanCloseHandle:关闭WLAN客户端句柄。WlanRegisterNotification:注册一个函数,该函数会在指定的WLAN接…

腾讯钟学丹:人工智能成为汽车行业新质生产力 推动数智化升级

近日&#xff0c;在中国电动汽车百人会论坛&#xff08;2024&#xff09;新质生产力分论坛上&#xff0c;腾讯智慧出行副总裁钟学丹发表了题为《AI驱动汽车“新智能”》的主题演讲&#xff0c;分享了腾讯AI大模型等新技术在汽车产业的创新应用成果。 腾讯智慧出行副总裁钟学丹 …

【鸿蒙HarmonyOS开发笔记】如何使用图片插帧将低像素图片清晰放大

开发UI时&#xff0c;当我们的原图分辨率较低并且需要放大显示时&#xff0c;图片会模糊并出现锯齿。如下图所示 这时可以使用interpolation()方法对图片进行插值&#xff0c;使图片显示得更清晰。该方法的参数为ImageInterpolation枚举类型&#xff0c;可选的值有: ImageInte…

预防诈骗之兼职,赚钱App的弊端

前言&#xff1a; 本期文章是我一个民警朋友让我发布的一期关于诈骗的文章&#xff0c;在2024年3月某日&#xff0c;一人在某某兼职赚钱类app被骗200元&#xff0c;所以请认真详细的观看完&#xff0c;实实预防诈骗&#xff0c;诈骗一直存在于身边&#xff0c;随着科技的发展&…

主键约束

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 主键约束可以看成是非空约束再加上唯一约束 也就是说设置为主键列&#xff0c;不能为空&#xff0c;不能重复 像一般用户编号是不可能重复的&#xff0c;也不可能为空的 …

C#开发中方法使用的问题注意

C#开发中&#xff0c;我们在进行方法内嵌时&#xff0c;需要注意方法回传带值时&#xff0c;我们需要对方法回传的值进行一个赋值传递 如下所示 console.WriteLine("请输入你的爱好&#xff1a;"); string aihao Console.ReadLine(); name ChangeData(name);同时在…

找不到msvcp110.dll怎么办,msvcp110.dll丢失的5种修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp110.dll丢失”。由于msvcp110.dll是Microsoft Visual C Redistributable Package的重要组成部分&#xff0c;它的缺失会导致依赖于该组件的软件无法正常启动或运行&#xff0c;比如某…

Java开发者的新宠:探索轻量级且功能强大的Magic-API

Java开发者的新宠&#xff1a;探索轻量级且功能强大的Magic-API 一、Magic-API简介二、Magic-API的核心特性三、结语 大家好&#xff0c;这里是程序猿代码之路&#xff0c;在当今的软件开发领域&#xff0c;快速迭代和高效交付是每个项目追求的目标。对于Java开发者来说&#x…

汽车电子零部件(7):电机Motor

前言: 新能源汽车的三大件是:电池、电机、电控。可见电机的重要性,可以说直接就取代了发动机。而用到电机的地方不仅仅有驱动四轮,还有方向盘、门窗甚至电池热管理等也都是需要电机这个器件的。当然就电机而言又分变频电机和直流电机,有刷电机和无刷电机。从架构上说,需…

Day21:实现退出功能、开发账号设置、检查登录状态

实现退出功能 将登录凭证修改为失效状态。跳转至网站首页。 数据访问层 不用写了&#xff0c;已经有了updateStatus方法&#xff1b; 业务层 UserService public void logout(String ticket) {loginTicketMapper.updateStatus(ticket, 1);}Controller层 RequestMapping(p…

React核心⼊⻔-lesson1

自学React从入门到精通,从使用到写源码 React⼊⻔ 课堂⽬标资源起步 ⽂件结构⽂件结构⼀览React和ReactDomJSX 使⽤JSX组件 组件的两种形式 class组件function组件组件状态管理 类组件中的状态管理函数组件中的状态管理事件处理组件通信 Props属性传递contextredux⽣命周期 变…

Python:filter过滤器

filter() 是 Python 中的一个内置函数&#xff0c;用于过滤序列&#xff0c;过滤掉不符合条件的元素&#xff0c;返回由符合条件元素组成的新列表。该函数接收两个参数&#xff0c;一个是函数&#xff0c;一个是序列&#xff0c;序列的每个元素作为参数传递给函数进行判定&…

行为型-观察者模式

文章目录 基本概念定义使用场景代码实现 延伸阅读java监听机制spring监听机制 基本概念 定义 观察者模式是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;其所有依赖者都会收到通知并自动更新。 观察者模式…

电脑msvcp140_1.dll丢失的解决方法,总结5种可靠的方法

在日常使用电脑的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“msvcp1401.dll丢失”。这个DLL文件是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows的应用程序来说至关重要。这个错误通常会导致某些应用程序无…

摄影第一课

色彩 红色绿色黄色 红色蓝色洋红 蓝色绿色青色 冷暖色 摄影基础 选择合适的前景&#xff0c;增加照片层次感 测光拍摄&#xff0c;照片有亮和暗的地方&#xff0c;立体感更强 拍摄技巧 拍摄倒影 手机靠近水面&#xff0c;距离越近拍到的倒影越多适当降低曝光、获得更加准…