华为OD机试真题 JavaScript 实现【矩阵稀疏扫描】【2023 B卷 100分】,附详细解题思路

news2024/12/23 8:18:00

在这里插入图片描述

一、题目描述

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

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

二、输入描述

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

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

三、输出描述

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

四、解题思路

  1. 先将数据加入到正矩阵和倒矩阵;
  2. 遍历正矩阵
    • 如果当前值不是最后一个,且当前值为0,下一个值也是0,则符合稀疏数组,稀疏行的个数+1,跳出循环;
    • 如果当前值是最后一个,且当前值为0,如果前一个值也是0,则符合稀疏数组,稀疏行的个数+1,跳出循环;
  3. 输出稀疏行的个数;
  4. 遍历倒矩阵;
    • 如果当前值不是最后一个,且当前值为0,下一个值也是0,则符合稀疏数组,稀疏列的个数+1,跳出循环;
    • 如果当前值是最后一个,且当前值为0,如果前一个值也是0,则符合稀疏数组,稀疏列的个数+1,跳出循环
  5. 输出稀疏列的个数;

五、JavaScript算法源码

function calculate(M, N, matrix) {
   // 正矩阵(行是行,列是列)
    const rowArr = matrix;
    // 倒矩阵(行是列,列是行)
    const colArr = transposeMatrix(matrix);

    // 稀疏行的个数
    let rowCount = 0;

    // 遍历正矩阵
    for (let i = 0; i < M; i++) {
        for (let j = 0; j < N; j++) {
            // 如果当前值不是最后一个,且当前值为0,下一个值也是0,则符合稀疏数组,稀疏行的个数+1,跳出循环
            if (j + 1 < N && rowArr[i][j] === 0 && rowArr[i][j + 1] === 0) {
                rowCount++;
                break;
            }

            // 如果当前值是最后一个,且当前值为0,如果前一个值也是0,则符合稀疏数组,稀疏行的个数+1,跳出循环
            if (j + 1 === N && rowArr[i][j] === 0 && rowArr[i][j - 1] === 0) {
                rowCount++;
                break;
            }
        }
    }

    console.log('存在连续0的行数:', rowCount);

    // 稀疏列的个数
    let colCount = 0;

    // 遍历倒矩阵
    for (let i = 0; i < N; i++) {
        for (let j = 0; j < M; j++) {
            // 如果当前值不是最后一个,且当前值为0,下一个值也是0,则符合稀疏数组,稀疏列的个数+1,跳出循环
            if (j + 1 < M && colArr[i][j] === 0 && colArr[i][j + 1] === 0) {
                colCount++;
                break;
            }

            // 如果当前值是最后一个,且当前值为0,如果前一个值也是0,则符合稀疏数组,稀疏列的个数+1,跳出循环
            if (j + 1 === M && colArr[i][j] === 0 && colArr[i][j - 1] === 0) {
                colCount++;
                break;
            }
        }
    }

    console.log('存在连续0的列数:', colCount);
}

// 转置矩阵
function transposeMatrix(matrix) {
    const M = matrix.length;
    const N = matrix[0].length;
    const transposedMatrix = [];

    for (let j = 0; j < N; j++) {
        const row = [];
        for (let i = 0; i < M; i++) {
            row.push(matrix[i][j]);
        }
        transposedMatrix.push(row);
    }

    return transposedMatrix;
}

六、效果展示

1、输入

6 5
1 1 0 1 1
0 1 0 1 0
1 0 0 1 1
1 0 1 加粗样式0 0
0 1 1 0 1
1 0 0 1 0

2、输出

3
3

3、说明

符合要求的行是:第三行1 0 0 1 1、第四行1 0 1 0 0、第六行1 0 0 1 0,共3行。

符合要求的列是:第二列1 1 0 0 1 0、第三列0 0 0 1 1 0、第四列1 1 1 0 0 1,共3列。


🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

备战金九银十,互联网大厂最全“Java 面试宝典 +Java 核心知识集”汇总

搬砖也有好几年了&#xff0c;本想在金三银四跳槽来着&#xff0c;结果我想你们应该猜到了&#xff0c;于是计划着下半年跳槽试试&#xff0c;算是提前为金九银十做准备吧&#xff01; 现在着手准备着以防万一自己措手不及&#xff0c;这不&#xff0c;这几天刚整理出炉的两份…

强化学习笔记-11 Off-policy Methods with Approximation

前几章我们讨论了off-policy方式&#xff0c;其同on-policy方式最大的不同之处在于其在训练所采取的动作&#xff0c;是根据behavior policy进行决策的&#xff0c;而不是根据target policy。这种方式的好处在于兼顾了exploitation and exploration。本节将讨论如何通过模型近似…

Spring MVC 的创建连接和使用

目录 前言&#xff1a; MVC 是什么&#xff1f; 1. Spring MVC 项目的创建和连接&#xff1a; 1.1 创建 1.2 连接 2. RequestMapping 注解使用详析&#xff1a; 2.1 指定请求类型&#xff1a; 2.1.1 指定 GET 请求 2.1.2 指定 POST 请求 3. 参数的获取与传递&#xff1a; 3.1 传…

CTR预估之WideDeep系列模型:DeepFM/DCN

前言 在CTR预估中&#xff0c;FM系列模型使用浅层网络&#xff08;线性模型&#xff09;&#xff0c;让模型自己学习特征组合交互&#xff0c;为显式建模的方式&#xff1b;而DNN系列模型使用深层网络&#xff0c;隐式挖掘模型的高阶特征交互。 本文继续介绍结合这两者优点的…

在我电脑中待了很久的5款使用办公软件

你电脑中用的最久的软件是哪些&#xff1f;以下是否有你曾经使用过的软件呢&#xff1f;工欲善其事&#xff0c;必先利其器&#xff0c;今天继续分享五款实用的办公软件。 矢量图绘制——Inkscape Inkscape是一款用于绘制和编辑矢量图形的工具。它可以让你用简单的操作来创建…

AI学术交流——“人工智能”和“神经网络学习”

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.人工智能 1.“人工智能之父” 2.达特茅斯会议&#xff08;人工智能起源&a…

2023四大服装管理软件,第1款最受欢迎!

对于服装行业来说&#xff0c;依靠传统的方式管理服装门店或工厂&#xff0c;很难实现精准高效的管理&#xff0c;往往是耗费了大量的时间和精力&#xff0c;也没有挣到什么钱。 这就需要借助服装管理软件&#xff0c;来降低管理和运营的成本&#xff0c;减少工作量的同时&…

自带海量设计模板的网站 精准尺寸一键套用出图

现在大家通过手机去购物时都是通过查看商品的详情页&#xff0c;因为详情页会介绍产品的功能和产品的设计优势等&#xff0c;还有产品的基本信息。那么对于刚接触电商的商家来讲&#xff0c;制作详情页和商品主图是一件困难的事情&#xff0c;但如果套用模板或者是直接选择一个…

vue结合elementui表格el-table实现弹窗checkbox自定义列显示隐藏,刷新保持上次勾选不丢失,附完整代码

el-table实现自定义列显示隐藏 有时候表格太多列,要是默认全都显示就会很拥挤,又不能固定只显示某些列,这时候我们可以让用户自定义要显示隐藏哪些列。 网上很多教程都是用的v-if,但是v-if非常麻烦,每一列都要写判断条件,本篇文章将用动态渲染的方式来控制表格列的显示隐…

【Linux】perf使用和FrameGraph

本文主要说明perf和FrameGraph的使用&#xff0c;例如&#xff1a;火焰图的输出&#xff0c;系统性能状态查看等。 Author:mayimin perf version 3.10.0-1160.80.1.el7.x86_64.debug 参考资料&#xff1a;perf example&#xff1a; https://www.brendangregg.com/perf.html 一…

100天精通Golang(基础入门篇)——第7天:深入学习键盘输入和打印输出,掌握常用函数和包

&#x1f337; 博主 libin9iOak带您 Go to Golang Language.✨ &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &#x1f30a; 《I…

【UE】滑动UI

效果 步骤 1. 新建一个控件蓝图&#xff0c;这里命名为“WBP_Slide” 2. 在关卡蓝图添加如下节点来显示控件蓝图 3. 打开“WBP_Slide”&#xff0c;添加一个滚动框控件 设置滚动框的锚点 设置滚动朝向为水平 在滚动框中添加一个画布面板 在画布面板中添加一个图像控件 由于我有…

设计优质微信小程序的实用指南!

微信小程序是一种快速发展的应用形式&#xff0c;设计良好的小程序能够提升用户体验并吸引更多的用户。在设计微信小程序时&#xff0c;有一些关键的指南可以帮助我们做出出色的设计。以下是即时设计总结的一些设计指南&#xff0c;希望能对准备设计微信小程序的人有所帮助。 …

64位和32位相比优势是什么(二)

程序的执行过程 当 CPU 执行程序的时候&#xff1a; 1.首先&#xff0c;CPU 读取 PC 指针指向的指令&#xff0c;将它导入指令寄存器。具体来说&#xff0c;完成读取指令这件事情有 3 个步骤&#xff1a; 步骤 1&#xff1a;CPU 的控制单元操作地址总线指定需要访问的内存地…

[CKA]考试之备份还原 etcd

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Task 首先&#xff0c;为运行在https://127.0.0.1:2379上的现有 etcd 实例创建快照…

36 # 加载 json 的处理流程

require 源码大致过程 mod.require 会默认调用 require 语法Module.prototype.require 模块的原型上有 require 方法Module._load 调用模块的加载方法&#xff0c;最终返回的是 module.exportsModule._resolveFilename 解析文件名&#xff0c;将文件名变成绝对路径&#xff0c…

UTF是变长编码

在阅读关于UTF8变长编码的文档时&#xff0c;看到如下内容&#xff0c; 文档中1110表示涉及3个字节&#xff0c;10表示涉及一个字节&#xff0c;还有后面的1110高位有三个1&#xff0c;表示从当前字节起有3字节参与表示UNICODE&#xff0c;后面的高位有1个1&#xff0c;表示从当…

Netty实战(十六)

UDP广播事件&#xff08;二&#xff09;编写广播者和监视器 一、编写广播者二、编写监视器三、运行 LogEventBroadcaster 和 LogEventMonitor 一、编写广播者 Netty 提供了大量的类来支持 UDP 应用程序的编写。下面我们列出一些要用到的类型&#xff1a; 名 称描 述interface…

价格·歧视

一级价格歧视与耳机价格歧视 价格歧视指的是厂商对于两个完全一样的产品收取不同的价格&#xff0c;无论是对同一消费者还是对不同消费者。 一级价格歧视&#xff08;完全价格歧视&#xff09; 对于每一个消费者都收取不同的价格&#xff0c;而且价格定在消费者最多愿意支付的…

基于Java新生报到系统设计与实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…