1. 程式人生 > >【Java】若MxN矩陣中某個元素為0, 則將其所在的行與列清零

【Java】若MxN矩陣中某個元素為0, 則將其所在的行與列清零

若直接遍歷整個矩陣,發現為零的元素就直接將所在行與列清零,這樣做有一個陷阱,在讀取已被清零的行或列時,讀到的全是零,於是所在的行或列都變成零。

很快整個矩陣的所有元素都全部變為零了。

其實我們並不關心具體的行號和列號,反正整行和整列都會被清零,我們可以標記出零元素的行號和列號,根據這個來進行清零

public class setZeros {
	public void setZero(int[][] matrix)
	{
		boolean[] row = new boolean[matrix.length];
		boolean[] column = new boolean[matrix[0].length];
		
		for (int i = 0; i < matrix.length; i++)
		{
			for (int j = 0; j < matrix[0].length; j++)
			{
				if (matrix[i][j] == 0)
				{
					row[i] = true;
					column[j] = true;
				}
			}
		}
		
		for (int i = 0; i < matrix.length; i++)
		{
			for (int j = 0; j < matrix[0].length; j++)
			{
				if(row[i] || column[j])
				{
					matrix[i][j] = 0;
				}
			}
		}
	}
}


相關推薦

JavaMxN矩陣某個元素0 所在的

若直接遍歷整個矩陣,發現為零的元素就直接將所在行與列清零,這樣做有一個陷阱,在讀取已被清零的行或列時,讀到的全是零,於是所在的行或列都變成零。 很快整個矩陣的所有元素都全部變為零了。 其實我們並不關心具體的行號和列號,反正整行和整列都會被清零,我們可以標記出零元素的行號和列

程式設計師面試金典1.7:M*N矩陣某個元素0所在的

1.7:編寫一個演算法,若M*N矩陣中某個元素為0,則將其所在的行與列清零。 咋一看,這個問題很簡單:直接遍歷整個矩陣,只要發現值為0的元素,就將其所在的行與列清零。不過這種方法有個缺陷:在讀取被清零的行與列時,讀到的盡是零,於是所在的行與所在的列都變成了0,很快,整個矩陣

M*N階矩陣某個元素0所在的

#include <bits/stdc++.h> using namespace std; struct Matrix { int data; int flag; }; int main() { struct Matrix a[10][10

給定一個m×n矩陣如果一個元素0的值設定0.

本題源自LeetCode -------------------------------------------------- 思路1  遍歷整個陣列,遇到0  就把整行和整列不為0 的值置為* ,然後再次遍歷陣列把* 換為0 void setZeroes(vector&

Java接口開發關於接受和發送json的相關範例

actual not span data private pla doby arr oms 接受json package com.suneee.scn.wms.web.rocketmq; import java.util.List; import net.sf.jso

javaspring項目 對entity進行本類間的克隆

tor mini cti false display des private rac 重寫 方法1: 【使用spring自帶BeanUtils實現克隆】 【要求:需要被克隆的類實現Cloneable接口並且重寫clone()方法】 》例子: 》》實體: package

JAVA在SpringBoot 專案 利用maven 的generate外掛

使用maven 外掛 generate生成MyBatis相關檔案 在專案中增加 maven 依賴 - mybatis-spring-boot-starter - mysql-connector-java - mybatis-generator-maven-plugin 外掛 自

JAVA如何在Mac安裝多個JDK?

1.安裝好全部JDK。 比如分別需要安裝1.7和1.8分別兩個; 2.修改bash_profile文件 安裝好後,啟動Ter修改Bash_profile文件;vim ~/.bash_profile代表原文修改,open ~/.bash_profile 是彈出

Java從內部類訪問變數,需要宣告final

Cannot refer to a non-final variable ‘result’ inside an inner class defined in a different method 從內部類中訪問變數’result’,需要宣告為final 這

Java刪除String陣列的空值

private String[] replaceNull(String[] str){     //用StringBuffer來存放陣列中的非空元素,用“;”分隔        StringBuffer sb = new StringBuf

焦慮、渴望掙紮的我們如何定義成功和失敗?

cse 處理 很好 以及 國家 媒體 你我 slim 今天  我們總在一個人失敗的時候低估他,而在成功的時候又過於追捧,我們不吝對所謂的成功者送上無數鮮花和掌聲,而對所謂的失敗者則冷眼相待,嗤之以鼻。   英國作家阿蘭·德波頓(Alain de Botton),帶領我們檢視

專家坐堂Q&A在 petalinux-config 選擇外部來源時符號鏈路添加內核來源目錄樹

路徑 目錄樹 status 變量 不同的 work symlink stat 符號 問題描述 作為 petalinux-config 菜單的一部分,現在可以將 Linux 內核指定為外部來源。 如果選擇了該選項,可為內核來源目錄樹添加兩個符號鏈路。 這會帶來兩個問題: 1.

Java 大話資料結構(18) 排序演算法(5) (直接插入排序) 資料結構演算法合集 資料結構演算法合集

本文根據《大話資料結構》一書,實現了Java版的直接插入排序。 更多:資料結構與演算法合集 基本概念   直接插入排序思路:類似撲克牌的排序過程,從左到右依次遍歷,如果遇到一個數小於前一個數,則將該數插入到左邊所有比自己大的數之前,也就是說,將該數前面的所有更大的數字都後移一位,空出來的位置放入該數。

java定義一個字串(可以改進鍵盤錄入)-Scanner

package test922; import java.util.Scanner; public class ScanerTest { private static Scanner sc; public static void main(final String[

Cwindows在**.exe觸發了一個斷點原因可能是堆被損壞解決方案C記憶體申請釋放真TM麻煩還是python好

寫程式過程中遇到malloc申請記憶體時出現錯誤,錯誤如下: 0x77C1E8FB (ntdll.dll) (Graph.exe 中)處有未經處理的異常: 0xC0000374: 堆已損壞。 (引數: 0x77C54270)        程式除錯過程中,在第一個

LeetCode-陣列-在排序陣列查詢元素的第一個和最後一個位置

給定一個按照升序排列的整數陣列 nums,和一個目標值 target。找出給定目標值在陣列中的開始位置和結束位置。 你的演算法時間複雜度必須是 O(log n) 級別。 如果陣列中不存在目標值,返回

java把ArrayList的某一個元素放在最後demo

// 學生list List<Student> students = new ArrayList<>(); Student s1 = new Student("haha",12,"女"); Student

javaLinux使用nohup命令啟動sh shell 指令碼java程式無限迴圈啟動問題。解決方案

一·背景 專案使用spring boot 搭建。在Linux作業系統使用nohup命令啟動sh shell 指令碼,程式無限迴圈啟動,只要是 讓程式在後臺啟動 都會無限迴圈啟動(程式本來應該啟動完畢的,但是從日誌上看程式又再次啟動了一遍,無限迴圈,而且程式也無法正常訪問)

Linux使用xshell登陸時密碼框灰色無法輸入密碼

inline round spl log 退出 灰色 ref linu .cn 使用xshell登陸時,出現以上情況,那麽這到底值咋回事呢?經過查詢以後發現是服務器端設置問題,解決辦法如下:vi /etc/ssh/sshd_config接著保存退出,然後重啟sshd服務se

C為什麼靜態變數會被初始化為0而自動變數卻不會被初始化?

把自動變數初始化為0的代價,將會增加函式呼叫的代價。C語言非常注重執行速度。 然而,把全域性變數區初始化為0,僅僅在程式啟動時候產生成本。這也許是這個問題的主要原因。 更精確的說,C++並不把靜態變數初始化為0,他們有自己的預設值,對於原生型別(native types)來