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

技术支持 合肥网站建设专门开发小程序的公司

技术支持 合肥网站建设,专门开发小程序的公司,长沙望城区政府门户网站,wordpress qq登录微信登录界面矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为0 。请使用 原地 算法。在计算机科学中,一个原地算法(in-place algorithm)是一种使用小的,固定数量的额外之空间来转…

矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为0 。请使用 原地 算法。在计算机科学中,一个原地算法(in-place algorithm)是一种使用小的,固定数量的额外之空间来转换资料的算法。当算法执行时,输入的资料通常会被要输出的部分覆盖掉。不是原地算法有时候称为非原地(not-in-place)或不得其所(out-of-place)。

在这里插入图片描述
输入:二维数组
输出:二维数组
思路

方法一:使用两个标记数组
两个标记数组分别记录每一行和每一列是否有零出现,如果出现,则将对应的标记数组置为true,最后再次遍历数组,用标记数组更新原数组即可

class Solution {public void setZeroes(int[][] matrix) {//用变量定义数组的行和列的长度,方便写代码int m = matrix.length;int n = matrix[0].length;//定义标记数组boolean [] row = new boolean[m];boolean [] col = new boolean[n];//对标记数组进行赋值for(int i = 0;i < m;i++){for(int j = 0;j < n;j++){if(matrix[i][j] == 0){row[i] = col[j] = true;}}}//再次遍历,只要有一个标记为true,则置为0for(int i = 0;i < m;i++){for(int j = 0;j < n;j++){if(row[i] || col[j]){matrix[i][j] = 0;}}}}
}

方法二:使用两个标记变量
使用矩阵的第一列和第一行去代替方法一中的标记数组,但是第一行和第一列的数值也会因此而改变,所以使用两个标记变量来第一行和第一列中原本是否包含0

class Solution {public void setZeroes(int[][] matrix) {//用变量定义数组的行和列的长度,方便写代码int m = matrix.length;int n = matrix[0].length;//定义标记变量boolean firstRow = false;boolean firstCol = false;//对标记变量进行赋值for(int i = 0;i < m;i++){if(matrix[i][0] == 0){firstCol = true;}}for(int i = 0;i < n;i++){if(matrix[0][i] == 0){firstRow = true;}}for(int i = 1;i < m;i++){for(int j = 1;j < n;j++){if(matrix[i][j] == 0){matrix[i][0] = matrix[0][j] = 0;}}}for(int i = 1;i < m;i++){for(int j = 1;j < n;j++){if(matrix[i][0] == 0 || matrix[0][j] == 0){matrix[i][j] = 0;}}}//更新第一行第一列if(firstCol){for(int i = 0;i < m;i++){matrix[i][0] = 0;}}if(firstRow){for(int i = 0;i < n;i++){matrix[0][i] = 0;}}}
}

方法三:使用一个标记变量
第一列的第一个元素即可以标记第一行是否出现0。但为了防止每一列的第一个元素被提前更新,我们需要从最后一行开始,倒序地处理矩阵元素。

class Solution {public void setZeroes(int[][] matrix) {//用变量定义数组的行和列的长度,方便写代码int m = matrix.length;int n = matrix[0].length;//定义标记变量boolean firstColAndRow = false;//对标记变量进行赋值for(int i = 0; i < m; i++){if(matrix[i][0] == 0){firstColAndRow = true;}for(int j = 1; j < n; j++){if(matrix[i][j] == 0){matrix[i][0] = matrix[0][j] = 0;}}}//倒序for(int i = m - 1; i >= 0; i--){for(int j = 1; j < n; j++){if(matrix[i][0] == 0 || matrix[0][j] == 0){matrix[i][j] = 0;}}if(firstColAndRow){matrix[i][0] = 0;}}}
}
http://www.dtcms.com/wzjs/247894.html

相关文章:

  • 做网站首页多少钱网页seo优化
  • 陕西建设厅执业注册中心网站国际时事新闻
  • 机械 网站源码阿里云服务器
  • 做婚恋网站的开发怎么办网站平台
  • 宠物网站设计模板常用搜索引擎有哪些
  • 对接标准做好门户网站建设搜外seo视频 网络营销免费视频课程
  • 东莞网站建设设计公司代运营服务
  • 怎么拥有自己的网站深圳市住房和建设局
  • 做国外网站需要多少钱上海百度公司地址
  • 泉州网站建设兼职seo自动发布外链工具
  • 网站做视频的软件有哪些网站怎样才能在百度被搜索到
  • lamp wordpress 一键安装赣州seo培训
  • 网站设计培训学校有哪家软文广告例子
  • wordpress做电商网站营销思路八大要点
  • 金溪网站建设推广qq营销软件
  • 网站建设中问题分析与解决体验式营销案例
  • 让其他公司做网站应注意什么问题解释seo网站推广
  • 在线生成手机网站营销渠道策划方案
  • 网站链接地图是怎么做的百度推广一天费用200
  • 动态ip做网站可以备案吗怎么建网站免费的
  • 什么网站做推广最好江门网站定制多少钱
  • 网站建设与管理实践报告拼多多关键词排名查询工具
  • dw软件做网站近三天的国内新闻
  • 大一网页设计电商网站作业哪里注册域名最便宜
  • 网站建设自学正规seo一般多少钱
  • seo搜索铺文章北京百度seo关键词优化
  • 有没有专业收费做网站优化的百度搜索引擎优化指南最新版
  • 济南网站建设排名百度推广怎么操作流程
  • 阿里建站平台官网快速seo关键词优化技巧
  • 火车头web在线发布到网站seo推广代运营