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

多维数组与矩阵之0所在的行列清零

问题描述

如果矩阵中的某个元素为0,则将其所在行和列清零
例如:
4 X 4矩阵
输出:
在这里插入图片描述

算法思路

这是一道考察数组下标的算法,有个小坑是:如果采用遇到一个零处理一个的方式,即在原数组上遇到一个零就把其对应的行和列元素变为零,则会把整个数组都变为0。

因为这是一个循环的过程,本来原数组中不为0的元素被消为0,产生错误,在数组中有0的情况下,整个数组都会被消为0。

所以采用新的数组来记录原数组中0元素的下标,用两个一维数组(分别长度为M、N)来替代一个M X N的二维数组,节省空间。

代码实现

public class _02_0所在的行列清零 {
    public static void main(String[] args) {
        int[][] matrix = {
                {1,2,0,4},
                {5,6,7,8},
                {9,0,11,12},
                {13,14,15,16}
        };
        solve(matrix);

    }
    public static void solve(int [][] matrix) {
        int M = matrix.length;
        int N = matrix[0].length;
        //用两个一个数组来记录二维数组中为0的行下标与列下标,比用一个M X N的二维数组要节省空间
        int[] row = new int[M];
        int[] col = new int[N];
        for (int i= 0;i < M;i ++) {
            for (int j = 0;j < N;j ++) {
                if (matrix[i][j] == 0) {
                    //标记0的行、列下标
                    row[i] = 1;
                    col[j] = 1;
                }
            }
        }
        //遍历两个一维数组中为1的下标,并把matrix中相应的行和列清零
        for (int i = 0;i < M;i ++) {
            for (int j = 0;j < N;j ++) {
                if (row[i] == 1 || col[j] == 1) {
                    matrix[i][j] = 0;
                }
            }
        }
        
        //输出二维数组
        for (int i = 0;i < M;i ++) {
            for (int j = 0;j < N;j ++) {
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println();
        }
    }
}

相关文章:

  • 多维数组与矩阵之之字形打印矩阵
  • 生姜有味的调色板
  • 设计模式之策略者模式详解(Strategy Pattern)
  • 利用J2ME里的RMS对记录进行排序
  • 设计模式之职责链(责任链)模式(ResponsibilityChain Pattern)
  • SWT GC的drawLine方法的一个隐藏Bug
  • 多维数组与矩阵之子数组的最大累加和
  • 游戏也是软件,J2ME游戏程序员不能忘本
  • 多维数组与矩阵之子矩阵的最大累加和
  • 本周技术关注:Oracle10G、MSSQL2005、MYSQL5: CLuster、Replication、Snapshot
  • 设计模式之解释器模式详解(Interpreter Pattern)
  • 书评--信息经营法则
  • Java最大公约数与最小公倍数
  • 关于SWT drawLine bug的进一步验证
  • 矩阵乘法
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【剑指offer】让抽象问题具体化
  • 2017 年终总结 —— 在路上
  • ES10 特性的完整指南
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • HTML中设置input等文本框为不可操作
  • IDEA 插件开发入门教程
  • laravel 用artisan创建自己的模板
  • MobX
  • Python十分钟制作属于你自己的个性logo
  • scrapy学习之路4(itemloder的使用)
  • SOFAMosn配置模型
  • springMvc学习笔记(2)
  • Vue学习第二天
  • 高度不固定时垂直居中
  • 深入浅出Node.js
  • 使用 QuickBI 搭建酷炫可视化分析
  • 异步
  • ionic异常记录
  • Java数据解析之JSON
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • #Linux(Source Insight安装及工程建立)
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转)ObjectiveC 深浅拷贝学习
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net 受管制代码
  • .Net7 环境安装配置
  • .net流程开发平台的一些难点(1)
  • .NET企业级应用架构设计系列之技术选型
  • .net项目IIS、VS 附加进程调试
  • @ComponentScan比较
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @NestedConfigurationProperty 注解用法
  • @RequestBody与@ModelAttribute