当前位置: 首页 > news >正文

Javascript每天一道算法题(十八)——矩阵置零-中等

文章目录

  • 1、问题
  • 2、示例
  • 3、解决方法
    • (1)方法1——标记数组


1、问题

给定一个 y x x 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

2、示例

示例 1:
输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出:[[1,0,1],[0,0,0],[1,0,1]]
111 101
101 => 000
111 101
在这里插入图片描述

示例 2:
输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
0120 0000
3452 => 0450
1215 0310
在这里插入图片描述

3、解决方法

(1)方法1——标记数组

思路:
1:用两个标记数组分别记录每一行和每一列是否有零出现。
2:遍历该数组一次,如果某个元素为 0,那么就将该元素所在的行和列所对应标记数组的位置置为 true
3:最后我们再次遍历该数组,用标记数组更新原数组即可。

let matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
var setZeroes = function(matrix) {// 1:获取x,y轴的长度let y = matrix.length; // 1-1:二维数组的长度(矩阵y轴的长度)let x = matrix[0].length; // 1-2:一维数组的长度(矩阵x轴的长度)// 2:获取行和列的长度(注意:行的长度由列决定)let row = new Array(y).fill(false); // 2-1: 行(行的长度是列的多少决定的,如示例二有四列,行为4)let col = new Array(x).fill(false); // 2-2: 列(列的长度是行的多少决定的,如示例二有三行,列为3)// 3:双层遍历该数组,如果其中有一个元素为0,将当前的行和列改为truefor(let i =0;i<y;i++){for(let j =0;j<x;j++){if(matrix[i][j] == 0){row[i] = col[j] = true}}}// 4:再次双层循环该数组,将之前标记为true的数据设置为0for(let i =0;i<y;i++){for(let j =0;j<x;j++){if(row[i] || col[j]){matrix[i][j] = 0}}}// 5:输出结果console.log('zz', matrix);
};

相关文章:

  • 2023年微软开源八个人工智能项目
  • linux 开发板以太网通过Ubuntu上外网方法
  • 从书籍结构体中查找定价最高的书籍
  • 一、TIDB基础
  • 个体卫生室电子处方操作流程,私人诊所用什么电子处方系统软件,佳易王诊所电子处方软件配方模板如何设置
  • redis的高可用
  • 浅谈电力设备智能无线温度检测系统
  • 中职网安-Linux操作系统渗透测-Server2130(环境加qq)
  • 计网(复习自用)
  • 【教学类-06-09】20231125 (55格版)X-Y之间“加法减法+-题” (以10-20之间为例)(加法的正序+逆序,减法的正序,题目多)
  • Oracle SQL 注入上的 Django GIS 函数和聚合漏洞 (CVE-2020-9402)
  • 【深度学习】学习率及多种选择策略
  • facebook如何群发小组贴
  • php站点伪静态配置(Apache+Linux)
  • expect脚本在自动化部署中的具体应用案例
  • @jsonView过滤属性
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 4. 路由到控制器 - Laravel从零开始教程
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • C++11: atomic 头文件
  • ES6简单总结(搭配简单的讲解和小案例)
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • github从入门到放弃(1)
  • javascript数组去重/查找/插入/删除
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Joomla 2.x, 3.x useful code cheatsheet
  • js面向对象
  • js如何打印object对象
  • Node + FFmpeg 实现Canvas动画导出视频
  • ReactNativeweexDeviceOne对比
  • Redis学习笔记 - pipline(流水线、管道)
  • 理解在java “”i=i++;”所发生的事情
  • 你不可错过的前端面试题(一)
  • 如何使用 JavaScript 解析 URL
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​马来语翻译中文去哪比较好?
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #Ubuntu(修改root信息)
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (+4)2.2UML建模图
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二十四)Flask之flask-session组件
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三)终结任务
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)jQuery 基础
  • .cfg\.dat\.mak(持续补充)
  • .NET delegate 委托 、 Event 事件
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .Net中的集合