矩阵稀疏扫描 - 矩阵

系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、题目描述
  • 二、输入描述
  • 三、输出描述
  • 四、Java代码
  • 五、测试用例
  • 提示


前言

本人最近再练习算法,所以会发布一些解题思路,希望大家多指教

一、题目描述

如果矩阵中的许多系数都为零,那么该矩阵就是稀疏的。对稀疏现象有兴趣是因为它的开发可以带来巨大的计算节省,并且在许多大的实践中都会出现矩阵稀疏的问题。

给定一个矩阵,现在需要逐行和逐列地扫描矩阵,如果某一行或者某一列内,存在连续出现的0的个数超过了行宽或者列宽的一半,则认为该行或者该列是稀疏的。

二、输入描述

第一行输入两个数,分别为M和N

接下来M行输入为矩阵的成员,每行N个成员,矩阵成员都是整数,范围-32768~32767

三、输出描述

输出两行,第一行表示稀疏行的个数,第二行表示稀疏列的个数。

四、Java代码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 行的数量int M = sc.nextInt();// 列的数量int N = sc.nextInt();// 正矩阵(行是行,列是列)int[][] rowArr = new int[M][N];//通过二维数组接受矩阵信息for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {rowArr[i][j] = sc.nextInt();}}//初始化满足稀疏行的行数int rowTimes = 0;//初始化每行最大连续0的个数int maxRowCount = 0;//初始化每行连续0的个数int rowCount = 1;//初始化每列连续0的个数int colCount = 0;//初始化满足稀疏列的列数int colTimes = 0;for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {//处理行数据if(rowArr[i][j] == 0){if(j+1 < N && rowArr[i][j+1] == 0){rowCount++;}} else {//行遍历过程中遇到1时,以为连续的0被断开,需要比较得出当前连续0的最大长度,及将rowCount重置为1maxRowCount = Math.max(rowCount, maxRowCount);rowCount = 1;}//列的处理,只需要在遍历第一行数据时,通过深度搜索进行判断if(i == 0){//处理列maxColcount = dfs(rowArr, i, j, M, colCount);if(maxColcount > M/2){colTimes++;}//每列遍历结束后,将maxColcount重置为0maxColcount = 0;}}if(maxRowCount > N/2){rowTimes++;}//每行遍历结束后,将maxCount重置为0maxRowCount = 0;}System.out.println("稀疏行的个数:"+rowTimes);System.out.println("稀疏列的个数:"+colTimes);}//初始化每列最大连续0的个数static int maxColcount = 0;private static int dfs(int[][] rowArr, int i, int j, int m, int colCount) {if(rowArr[i][j] == 0){colCount++;}int x = i+1;if(x>=0 && x < m){if(rowArr[x][j] == 1){//当前元素为1,则需要断开连续区间,求出当前最大的连续0长度,重置colCountmaxColcount = Math.max(maxColcount, colCount);colCount = 0;}//继续向下深度搜索colCount = dfs(rowArr, x, j, m, colCount);}return Math.max(maxColcount, colCount);}

五、测试用例

输入:
7 6
1 1 0 1 1 0
0 1 0 0 0 1
1 0 0 0 1 0
1 0 0 0 0 0
0 1 1 0 0 0
1 0 0 0 0 1
1 0 0 0 0 1
输出:
在这里插入图片描述

提示

也可以通过,矩阵反转来处理列的数据,本人有点偷懒,所以就直接在处理第一行元素的时候,顺便处理了列的数据。

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

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

相关文章

Rust编程语言的特点及其适合做什么

Rust编程语言的特点 Rust是一门系统级编程语言&#xff0c;它有如下特点。 1. 类C的语言语法 Rust的具体语法和C/C类似&#xff0c;都是由花括号限定代码块&#xff0c;还有一样的控制流关键字&#xff0c;例如if、else、while和for。然而&#xff0c;也并非所有的C或者C关键…

Scratch四级:第07讲 编程数学02

第07讲 编程数学02 教练&#xff1a;老马的程序人生 微信&#xff1a;ProgrammingAssistant 博客&#xff1a;https://lsgogroup.blog.csdn.net/ 讲课目录 常考的数学问题项目制作&#xff1a;“求最大公约数”项目制作&#xff1a;“求最小公倍数”项目制作&#xff1a;“早餐…

RAG讲解

现有的LLM已经具备了理解、生成、逻辑和记忆能力&#xff0c;RAG(Retrieval Augmented Generation)则是为其套上外挂&#xff0c;使LLM能够访问训练数据来源之外的权威知识库&#xff0c;并生成领域特定的内容&#xff0c;而无须重新训练模型。 RAG的优势 经济高效&#xff1a…

Meilisearch使用过程趟过的坑

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

opencompass实践

参考教程 https://github.com/InternLM/Tutorial/blob/camp2/opencompass/readme.md 下载opencompass&#xff0c;配置必要的环境之后&#xff0c;解压下载的数据集 cp /share/temp/datasets/OpenCompassData-core-20231110.zip /root/opencompass/ unzip OpenCompassData-co…

如何远程操作服务器中的Python编译器并将运行结果返回到Pycharm

文章目录 一、前期准备1. 检查IDE版本是否支持2. 服务器需要开通SSH服务 二、Pycharm本地链接服务器测试1. 配置服务器python解释器 三、使用内网穿透实现异地链接服务器开发1. 服务器安装Cpolar2. 创建远程连接公网地址 四、使用固定TCP地址远程开发 本文主要介绍如何使用Pych…

RPA正常跑,cmd输入cookies跑不出来,如何解决??

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Python从0到POC编写--模块(三)

base64模块&#xff1a; base64模块是用来对字符进行base64编码解码 这个大家应该都比较熟悉了。 常用的两个方法有 b64encode 和 b64decode b64encode 进行base64编码 编码&#xff1a; >>> import base64 >>> string hello world >>> r ba…

SQL-递归查询

运行环境&#xff1a; Mysql8以上&#xff0c;递归查询功能在8以上版本被正式引入 一、SQL递归查询的概念 递归指的是通过调用函数或过程或自身来解决问题的方法&#xff0c;常用于一些具有规律性循环的操作。SQL递归查询是基于一组初始数据&#xff0c;通过递归查询&#xf…

Java 中正则表达式简介与应用

1. 正则表达式简介 正则表达式&#xff08;Regular Expression&#xff0c;简称RE&#xff09;是一种用来描述字符串规则的语言&#xff0c;它可以用来匹配、查找和替换字符串。正则表达式在各种编程语言中都得到了广泛的应用&#xff0c;例如&#xff1a; 文本编辑器&#x…

Spring-全面详解

Spring&#xff0c;就像是软件开发界的一个超级英雄&#xff0c;它让编写Java程序变得更简单、更灵活。想象一下&#xff0c;如果你要盖一栋大楼&#xff0c;Spring就是那个提供各种工具、框架和最佳实践的建筑大师&#xff0c;帮助你高效、优雅地搭建起整个项目。 Spring是啥&…

机器人系统ros2-开发实践06-将静态坐标系广播到 tf2(Python)-定义机器人底座与其传感器或非移动部件之间的关系

发布静态变换对于定义机器人底座与其传感器或非移动部件之间的关系非常有用。例如&#xff0c;最容易推断激光扫描仪中心框架中的激光扫描测量结果。 1. 创建包 首先&#xff0c;我们将创建一个用于本教程和后续教程的包。调用的包learning_tf2_py将依赖于geometry_msgs、pyth…

【机器学习】集成学习在信用评分领域实例

集成学习在信用评分领域的应用与实践 一、引言二、集成学习的概念与原理三、集成学习在信用评分中的应用实例四、总结与展望 一、引言 在当今金融数字化快速发展的时代&#xff0c;信用评分成为银行、金融机构等评估个人或企业信用风险的重要工具。然而&#xff0c;单一的信用评…

代码随想录算法训练营第五十天

十分后悔昨天没有把题写完再去玩&#xff0c;今天要受苦啦。 309.最佳买卖股票时机含冷冻期 class Solution { public:int maxProfit(vector<int>& prices) {vector<vector<int>>dp(prices.size(),vector(4,0));dp[0][0] -prices[0]; //买入dp[0][1]…

Map、Set和Object的区别

Set ES6提供了新的数据结构Set&#xff0c;类似于数组&#xff0c;但成员值是唯一的&#xff0c;没有重复的值 Set本身是一个构造函数(要 new)&#xff0c;用来生成Set数据结构 Set 对象允许你储存任何类型的唯一值&#xff0c;无论是原始值或者是对象引用 每个值在 Set 中…

WebRTC 中的 ICE 实现

WebRTC 中的 ICE 实现 WebRTC 中的 ICE 实现Candidate 种类与优先级ICE 策略P2P 连接完全锥型 NATIP 限制锥型 NAT端口限制锥型 NAT对称型 NATNAT 类型检测如何进行 NAT 穿越 网络中继TURN 协议中转数据WebRTC 使用 TURN 协议STUN/TURN 服务器的安装与部署 WebRTC 中的 ICE 实现…

数据库原理及应用--事务

事务是一组操作的集合&#xff0c;是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 比较经典的事务:银行转账业务。 张三向李四转1000&#xff0c;这个时候&am…

如何衡量和提高客户满意度?

客户满意度衡量客户对你的产品或服务的喜爱程度。在某些情况下&#xff0c;它可以成就或毁掉企业业务。高度满意的客户更有可能保持忠诚并在未来花费更多。另一方面&#xff0c;不满意的客户更有可能转向竞争对手的品牌。 那么&#xff0c;如何保持较高的客户满意度呢&#xf…

如何打破数据管理僵局,释放数据资产价值?[AMT企源案例]

引言 数据是企业信息运作的核心和基础&#xff0c;是影响企业决策的关键要素&#xff0c;而主数据是数据中的最基础和公共的部分。面临长期以来的数据治理缺失导致的杂论局面&#xff0c;如何有条不紊推进主数据管理&#xff0c;让数据资产“活”起来&#xff1f;S集团的做法非…

torch_geometric安装(CPU版本)

①打开官方安装网址&#xff1a;https://pytorch-geometric.readthedocs.io/en/2.3.0/install/installation.html ②对根据Pytorch选择相应版本。此前一直用CUDA不成功&#xff0c;这次使用CPU版本&#xff08;因为不用对应cuda&#xff0c;pytorchcudageometric三者对应起来很…