1.7数组-清除行列

题目描述

请编写一个算法,若MxN矩阵中某个元素为0,则将其所在的行与列清零。

给定一个MxN的int[][]矩阵(C++中为vector<vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]矩阵(C++中为vector<vector>),保证n小于等于300,矩阵中的元素为int范围内。

测试样例:

[[1,2,3],[0,1,2],[0,0,1]]
返回:[[0,0,3],[0,0,0],[0,0,0]]

解法:循环搜索,统计记录0所在的行列坐标,然后进行清0操作,用两个标志进行标记,行和列是否出现了0
#include <iostream>
#include <vector>
using namespace std;
void printMat(vector<vector<int> > mat, int n) {
    for(int i=0; i < n; i++) {
        for(int j = 0; j < n; j++)
            cout << mat[i][j] << "   ";
            cout << endl;
    }
}
vector<vector<int> > clearZero(vector<vector<int> > mat, int n) {
        // write code here
        //循环搜索,统计记录0所在的行列坐标,然后进行清0操作
        vector<int> rol(n), col(n);
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < n; j++) {
				if(mat[i][j] == 0) {
				col[j] = 1;
				rol[i] = 1;
				}
			}
		}
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < n; j++) {
			    if(rol[i] == 1 || col[j] == 1)
				mat[i][j] = 0;
		      }
		}
		printMat(mat, n);
		return mat;

}

int main(int argc, char** argv) {
    int n = 5;
    vector<vector<int> > array(n); //3个向量
    for(int i = 0; i < n; i++) {
        array[i].resize(n);//设置数组的大小3X3
        }
    for(int i = 0; i < n; i++) {
       for(int j = 0; j < n; j++) {
        array[i][j] = (n * i - 5);
       }
    }
    printMat(array, n);
    clearZero(array, n);
    return 0;
}

  

时间: 2024-10-27 06:07:03

1.7数组-清除行列的相关文章

合并两数组,清除相同的项

//合并两数组,清除相同的项(长的数组放前面)var removeDuplication = function (arrA, arrB) { var i = 0, n = 0, lenA = arrA.length, lenB = arrB.length, _stack = []; outSide: for (; i < lenB; i++) { for (; n < lenA; n++) { if (arrB[i].subId === arrA[n].subId) { arrB.splice

第6章 数组 二维数组互调行列

1.编写java程序,将二维数组中的行列互调显示出来.如: 1 2 3        显示出的结果为:      1 4 7 4 5 6                                    2 5 8 7 8 9                                    3 6 9 package six; public class Sixoneegiht { public static void main(String[] args){ int arr[][]=n

c#中获取数组的行列个数的方法

GetUpperBound可以获取数组的最高下标.GetLowerBound可以获取数组的最低下标.这样就可以实现对数组的遍历//定义二维数组string[,] myStrArr2=new string[,]{{"油","盐"},{"围城","晨露"},{"毛毛熊","Snoopy"}};for(int i=myStrArr2.GetLowerBound(0);i<=myStrAr

二维数组给定行列获取周围点的算法

定义方向: 左上=左|上 XxxConstant.h enum{LEFT = 1, RIGHT = (1 << 1), TOP = (1 << 2), BOTTOM = (1 << 3), LEFT_TOP = (LEFT|TOP), RIGHT_TOP=(RIGHT|TOP), LEFT_BOTTOM=(LEFT|BOTTOM), RIGHT_BOTTOM=(RIGHT|BOTTOM)}; int DIRECTIONS[8] = {LEFT, RIGHT, TOP,

java 二维数组的行列长度

在 java 中,其实只有一维数组,而二维数组是在一维数组中嵌套实现的.比如 int[][] a = {{},{},{},{}} 要取行数和某一行的列数可以 : int rowLen = a.length; int colLen = a[0].length; 数组,长度竟然可以是0  ,奇妙 Object[] a = new Object[0]; 原文地址:https://www.cnblogs.com/heyboom/p/9571368.html

清除行列

题目描述 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零. 给定一个N阶方阵int[][](C++中为vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内. 测试样例: [[1,2,3],[0,1,2],[0,0,1]] 返回:[[0,0,3],[0,0,0],[0,0,0]] class Clearer { public: vector<vector<int>

JAVA实现二维数组的行列转换

public class Test { public static void main(String[] args) {    String[][] oldArray = {   {"公开单位1","公开单位2","公开单位3","公开单位4","公开单位5","公开单位6"},        {"DL_GKBM1","DL_GKBM2",&quo

将二维数组中的行列互换

情景:二维数组可以存储表格数据,还可以根据下标索引加入各种运算,而且图片的关键运算方法也是以二维数组为基础进行矩阵运算的. //创建二维数组 int arr[][] = new int[][]{{1,2,3},{4,5,6},{7,8,9}}; System.out.println("行列互掉前:"); //输出二维数组 printArray(arr); int arr2[][] = new int[arr.length][arr.length]; //调整数组行列数据 for (in

在一个按行列递增的二维数组中查找一个数是否存在

唯一要求:二维数组按行列递增 巧妙的利用二分法的特性,先跟右上角的元素相比,大于行+1,小于列-1,否则返回行列 #include<iostream> using namespace std; #define M 3 void array_bsearch(int array[][M],int value) { int i=0;//行 int j=M-1;//列 while(i<sizeof(array)/M) while(j>=0) { if(value > array[i]