将矩阵中为0的元素所在行列清零

public class setZero {
	static void print(int [][]a){
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a[i].length;j++){
				System.out.print(a[i][j]+" ");
			}
			System.out.println();
		}
	}
	/*static void SetZero(int [][]a, int i, int j){
		for(int k=0; k<a.length;k++){
			a[i][k]=0;
		}
		for(int k=0; k<a[i].length;k++){
			a[k][j]=0;
		}
	}*/
	public static void main(String[] args) {
		int [][]a={ {1,2,3}, {4,0,5}, {6,7,8}};
		//方法1,用数组标记零元素的位置,空间复杂度O(MN)
		/*int [][]b = new int[3][3];*/

		//方法2,用两个数组分别标记零元素的行和列
		boolean []row=new boolean[a.length];
		boolean []col=new boolean[a[0].length];
		print(a);
		for(int i=0;i<a.length;i++){
			for(int j=0; j<a[i].length; j++){
				if(a[i][j]==0){
					/*b[i][j]=1;*/
					row[i]=true;
					col[j]=true;
				}
			}
		}
		/*for(int i=0;i<b.length;i++){
			for(int j=0;j<b[i].length;j++){
				if(b[i][j]==1){
					SetZero(a,i,j);
				}
			}
		}*/
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a[i].length;j++){
				if(row[i] || col[j]){
					a[i][j]=0;
				}
			}
		}
		print(a);
	}
}
/*output example
1 2 3
4 0 5
6 7 8 

1 0 3
0 0 0
6 0 8 */

将矩阵中为0的元素所在行列清零

时间: 2025-01-07 20:54:28

将矩阵中为0的元素所在行列清零的相关文章

c编程:求出4&amp;#215;4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。

//求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max,min; int max1,max2;//记录最大值的坐标 int min1,min2;//记录最小值的坐标 int i,j; int a[4][4]; //为数组赋值 for(i=0;i<4;i++) { for(j=0;j<4;j++) { scanf("%d",&

1007 正整数分组 1010 只包含因子2 3 5的数 1014 X^2 Mod P 1024 矩阵中不重复的元素 1031 骨牌覆盖

1007 正整数分组 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个数N,N为正整数的数量. 第2 - N+1行,N个正整数. (N <= 100, 所有正整数的和 <= 10000) Output 输出这个最小差 Input示例 5 1 2 3 4 5 Output示例 1这题不就是小李打怪兽吗,不知道谁模仿谁,呵呵,刚还是我编的题里的,dp,证明一下(要证明什么自

c编程:求出4&#215;4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。

//求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max,min; int max1,max2;//记录最大值的坐标 int min1,min2;//记录最小值的坐标 int i,j; int a[4][4]; //为数组赋值 for(i=0;i<4;i++) { for(j=0;j<4;j++) { scanf("%d",&

51 NOD 1024 矩阵中不重复的元素(技巧)

传送门 1024 矩阵中不重复的元素 题目来源: Project Euler 一个m*n的矩阵. 该矩阵的第一列是a^b,(a+1)^b,-..(a + n - 1)^b 第二列是a^(b+1),(a+1)^(b+1),-..(a + n - 1)^(b+1) --. 第m列是a^(b + m - 1),(a+1)^(b + m - 1),-..(a + n - 1)^(b + m - 1) (a^b表示a的b次方) 下面是一个4*4的矩阵: 2^2=4, 2^3=8, 2^4=16, 2^5=

51nod 1024 矩阵中不重复的元素(质因数分解+map判重)

1024 矩阵中不重复的元素 题目来源: Project Euler 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 取消关注 一个m*n的矩阵. 该矩阵的第一列是a^b,(a+1)^b,.....(a + n - 1)^b 第二列是a^(b+1),(a+1)^(b+1),.....(a + n - 1)^(b+1) ....... 第m列是a^(b + m - 1),(a+1)^(b + m - 1),.....(a + n - 1)^(b +

找出矩阵中含有0最多的一行(find the longest row of zero)

对于一个n*n的矩阵,其中只包含有0,1两种元素且,所有的0都在1之前,请找出矩阵中0最多的一行.(Given an N-by-N matrix of 0s and 1s such that in each row no 0 comes before a 1, find the row with the most 0s in O(N) time.) 初看这题,想到的算法就是每一行都设置一个计数器,记录每行的0的个数,然后找出最大值即可(暴力解法). 算法实现: int* find_the_lon

python中大于0的元素全部转化为1,小于0的元素全部转化为0的代码

[code] """ 大于0的元素全部转化为1 """ np_arr = np.array([[1 ,2, 3, 4]]) print("转化前:") print(np_arr) print("转化后:") print(np.int64(np_arr>0)) [result] 转化前: [[1 2 3 4]] 转化后: [[1 1 1 1]] [code] """ 小于0

将矩阵中值为0的元素所在的行和列设置为0, in-place O(1)space O(mn) time

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Follow up: Did you use extra space? A straight forward solution using O(mn) space is probably a bad idea. A simple improvement uses O(m + n) space, but stil

PHP清楚数组中为0的元素

array_diff($arr, [0]): // 清楚数组中指定元素 $arr = [1,2,3,0,1]; $arr = array_diff($arr, [0]);//输出[1,2,3,1] var_dump($arr); 原文地址:https://www.cnblogs.com/camg/p/11986596.html