零矩阵

暴力解法:先全部检索,定位0所在的位置, 记录到新的数组

                  数组的行列分别进行去重

                  数组中记录的行列赋值为零

如果直接修改,在行被修改之后,修改列时会因为行已经被修改产生影响

import org.junit.Test;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;

public class ZeroMatrix {
    @Test
    public void test1() {
        int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 0}, {7, 8, 9}};
        ZeroMatrix.solution(arr);
        for (int[] l : arr) {
            for (int r : l) {
                System.out.print(r + " ");
            }
            System.out.println();
        }
    }

    public static void solution(int[][] arr) {
        List<Integer> listRow = new ArrayList<>();//记录存在零的行
        List<Integer> listColumn = new ArrayList<>();//记录存在零的列
        //遍历,记录零位置的行与列
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if(arr[i][j] == 0){
                    listRow.add(i);
                    listColumn.add(j);
                }
            }
        }

        //去重
        LinkedHashSet<Integer> hashSetRow = new LinkedHashSet<>(listRow);
        LinkedHashSet<Integer> hashSetColumn = new LinkedHashSet<>(listColumn);

        int k = 0,l = 0;
        for (int i = 0; i < arr.length; i++) {
            if(hashSetRow.contains(i)){//此时的i为存在零的行
                while(k < arr[0].length){
                    arr[i][k++] = 0;//行赋值为零
                }

            }else {
                for (int j = 0; j < arr[0].length; j++) {
                    if (hashSetColumn.contains(j)){//此时的j为存在零的列
                        while(l < arr.length){
                            arr[l++][j] = 0;//列赋值为零
                        }
                    }
                }
            }
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二十三种设计模式第十四篇--策略模式

策略模式&#xff1a;主要围绕一个类的行为或者其算法在运行时更改&#xff0c;也是一种行为型模式。 在软件开发中&#xff0c;我们经常遇到需要根据不同的情况选择不同算法或行为的情况。传统的做法是使用大量的条件语句来实现这种逻辑&#xff0c;但这样的实现方式往往难以…

Python模拟MQTT v3.1.1服务器

示例代码 import logging import asyncio from hbmqtt.broker import Broker# 设置日志级别为DEBUG logging.basicConfig(levellogging.DEBUG)# 创建MQTT服务器 broker Broker()# 启动MQTT服务器 async def start_broker():await broker.start()# 停止MQTT服务器 async def s…

python离线安装ibm_db

下载离线包ibm_db以及clidriver 下载imb_db 在pypi官方网站https://pypi.org/project/ibm-db/#files下载离线安装包ibm_db-3.0.2.tar.gz。下载clidriver 下载地址&#xff1a;https://public.dhe.ibm.com/ibmdl/export/pub/software/data/db2/drivers/odbc_cli/nt32_odbc_cli.…

C语言学生信息管理系统

C语言版学生信息管理系统 一&#xff0c;开发环境 操作系统&#xff1a;windows10, windows11, linux, mac等。开发工具&#xff1a;Qt, vscode, visual studio等开发语言&#xff1a;c语言 二&#xff0c;功能需求 1. 用户界面: 提供一个简洁的文本界面&#xff0c;用户可…

AI 对抗超级细菌:麦克马斯特大学利用深度学习发现新型抗生素 abaucin

内容一览&#xff1a;鲍曼不动杆菌是一种常见的医院获得性革兰氏阴性病原体&#xff0c;通常表现出多重耐药性。利用传统方法&#xff0c;发现抑制此菌的新型抗生素很困难。但利用机器学习可以快速探索化学空间&#xff0c;从而增加发现新型抗菌分子的可能性。近期&#xff0c;…

AI大数据智能视频融合平台EasyCVR新增Ehome黑白名单配置

EasyCVR视频融合平台基于云边端智能协同架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台支持海量视频汇聚管理&#xff0c;可支持多协议接入&#xff0c;包括市场主流标准协议与厂家私有协议及SDK&#xff0c;如&#xff1a;国标GB28181、RTMP、RTSP/Onvi…

2023-07-12:RocketMQ如何做到消息不丢失?

2023-07-12&#xff1a;RocketMQ如何做到消息不丢失&#xff1f; 答案2023-07-12&#xff1a; RocketMQ通过刷盘机制、消息拉取机制和ACK机制等多种方式来确保消息投递的可靠性&#xff0c;防止消息丢失。 1.刷盘机制 RocketMQ中的消息分为内存消息和磁盘消息&#xff0c;内…

【Linux】基础开发工具——gcc/g++篇

文章目录 一、预处理1.1 头文件展开1.2 条件编译 二、编译三、汇编四、链接4.1 什么是库?4.2 库的分类4.3 目标文件和库是如何链接的&#xff1f;4.3.1 动态链接4.3.2 静态链接 4.4 动静态链接的优缺点对比 五、Debug&&release 前言 &#xff1a;  在前面的文章里给大…

1、计算机网络核心

序号地址1计算机网络核心2数据库相关3Redis4Linux相关5JVM的内容6GC相关的7Java多线程与并发8Java多线程与并发-原理9Java常用类库与技巧10Java框架-Spring 文章目录 1、OSI开放式互联参考模型2、TCP/IP3、TCP报文头4、TCP的三次握手5、TCP的四次挥手6、为什么会有TIME_WAIT状态…

ARM Coresight 系列文章 7 - ARM Coresight 通过 AHB-AP 访问 cpu 内部 coresight 组件

文章目录 如下图所示&#xff0c;如果A78想去访问M33的内部 coresight 组件 ETM&#xff0c;需要要怎么做&#xff1f; 答案也正是在图中&#xff0c;首先A78 通过AXI 互联&#xff0c;接入到 APBIC 的 slave port&#xff0c;再通过APBIC 的 master 送出&#xff0c;而APBIC中…

机器学习-进化算法

进化算法 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;crossovermutation 进化策略&#xff08;Evolutionary Strategies&#xff0c;ES&#xff09;基因编程&#xff08;Genetic Programming&#xff09;Multi-objective Evolutionary Algorithms 遗传算…

在Linux中传输文件文件夹的10个scp命令

scp 命令的基本语法 下面的命令将读作 copy source_file_name进入destination_folder在destination_host使用username account。 > scp source_file_name usernamedestination_host:destination_folder里面有很多参数scp你可以使用的命令。以下是可能在日常使用中使用的参数…

跟着Promise的节奏,让你的代码脱颖而出

文章目录 Promise简介Promise实例方法1. then(onFulfilled, onRejected)2. catch(onRejected)3. finally(onFinally)4. Promise.resolve(value)5. Promise.reject(reason)6. Promise.all(iterable)7. Promise.race(iterable) Promise实例方法1. prototype.then(onFulfilled, on…

基于springboot+Redis的前后端分离项目(八)-【黑马点评】

&#x1f381;&#x1f381;资源文件分享 链接&#xff1a;https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码&#xff1a;eh11 好友关注&Feed流 &#xff08;一&#xff09;好友关注-关注和取消关注(二)好友关注-共同关注&#xff08;三&#xff09; 好友…

mfc120u.dll丢失修复,mfc120u.dll缺失的解决方法

MFC120u.dll缺失的原因 当系统中缺少或损坏了MFC120u.dll文件时&#xff0c;就会出现"MFC120u.dll缺失"的错误提示。造成MFC120u.dll缺失的原因可能有以下几种情况&#xff1a; 1.文件删除或损坏&#xff1a;MFC120u.dll文件可能因为误删除、病毒感染、硬盘故障等原…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(十一)

今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏…

Jmeter上传文件接口测试

Jmeter上传文件接口测试 接口测试&#xff0c;想必大家都做过&#xff0c;但是上传文件的接口&#xff0c;可能就不知所措。其实呢&#xff0c;还是那么回事~ 一、接口的业务 在接口文档缺失的前提下&#xff0c;那就从抓包玩起~Fiddler或者F12都可以。 本次我们接口实现的…

python验证公网ip与内网ip

什么是公网IP 公网IP&#xff08;Public IP&#xff09;是指在互联网中全球唯一标识一个设备或网络的IP地址。它是供公众访问和通信的IP地址。 公网IP是由互联网服务提供商&#xff08;ISP&#xff09;分配给用户或组织的&#xff0c;它允许设备通过互联网与其他设备进行通信…

如何高效的开展app的性能测试

目录 APP性能测试是什么 APP性能测试怎么做 性能测试场景的设计 性能指标的定义 规范化执行流程 性能数据数据收集 性能数据分析 性能问题定位 性能测试报告 APP性能测试是什么 从网上查了一下&#xff0c;貌似也没什么特别的定义&#xff0c;我这边根据自己的经验给出…

3.清除浮动

3.1 为什么需要清除浮动? 由于父级盒子在很多情况下&#xff0c;不方便给高度&#xff0c;但是子盒子浮动又不占有位置&#xff0c;最后父级盒子高度为0时&#xff0c;就会影响下面的标准流盒子。 ●由于浮动元素不再占用原文档流的位置&#xff0c;所以它会对后面的元素排…