经典算法面试题目-置矩阵行列元素为0(1.7)
来源:互联网 发布:python获取request参数 编辑:程序博客网 时间:2024/06/18 16:31
题目
Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.
写一个函数处理一个MxN的矩阵,如果矩阵中某个元素为0,那么把它所在的行和列都置为0.
解答
简单题。遍历一次矩阵,当遇到元素等于0时,记录下这个元素对应的行和列。
可以开一个行数组row和列数组col,当元素a[i][j]等于0时, 就把row[i]和col[j]置为1。
第二次遍历矩阵时,当某个元素对应的行row[i] 或列col[j]被设置为1,说明该元素在需要被置0的行或列上,因此将它(行/列)置0。
代码如下:
#include <iostream>#include <cstring>using namespace std;void zero(int a[5][5], int m, int n){ bool row[m], col[n]; memset(row, 0, sizeof(row)); memset(col, 0, sizeof(col)); for(int i=0; i<m; ++i) for(int j=0; j<n; ++j) if(a[i][j] == 0){ row[i] = true; col[j] = true; } for(int i=0; i<m; ++i) for(int j=0; j<n; ++j) if(row[i] || col[j]) a[i][j] = 0;}int main(){ int a[5][5] = { {1, 2, 3, 4,5}, {5, 6, 0, 7,8}, {9, 0, 1, 1,2}, {3, 4, 1, 1,9}, {4, 3, 0, 6,9} }; for(int i=0; i<5; ++i){ for(int j=0; j<5; ++j) cout<<a[i][j]<<" "; cout<<endl; } cout<<endl; zero(a, 5, 5); for(int i=0; i<5; ++i){ for(int j=0; j<5; ++j) cout<<a[i][j]<<" "; cout<<endl; } cout<<endl; return 0;}
输出结果:
1 0
- 经典算法面试题目-置矩阵行列元素为0(1.7)
- 经典算法面试题目-矩阵旋转90度(1.6)
- 将二维矩阵0元素所在行列都标记为0
- Set Matrix Zeroes 将矩阵行列置为0
- 有 M X N的矩阵,若行某行某列为0,则置0元素所在行列所有元素为0?
- 经典算法面试题目-替换字符串的内容(1.5)
- [每天一题]如果M*N的矩阵中的一个元素为0,则设置其整个行列为0
- 面试经典题目:字符串的反转算法
- 【LeetCode-面试算法经典-Java实现】【070-Set Matrix Zeroes(矩阵置零)】
- 中国人民银行面试题目(经典题目2)
- Cracking coding interview(1.7) 设置某个位置为零的矩阵对应行列均为0
- 经典算法题:谷歌面试经典题目
- 经典算法面试题目-设计算法移除字符串中重复的字符(1.3)
- 把矩阵0元所在行列设置为0
- 使用R语言为矩阵(表格)的行列命名
- matlab根据行列索引矩阵寻找元素
- Java 程序员面试题目(经典)^_^
- 经典测试面试题目汇总(一)
- OSI七层模型的作用
- 最长公共子串
- 时间管理 | 要这样学习
- thinkphp 奇怪的问题
- LeetCode--No.342--Power of Four
- 经典算法面试题目-置矩阵行列元素为0(1.7)
- 进程
- 深入理解Dalvik字节码指令及Smali文件
- 创建进程
- [leetcode] 125. Valid Palindrome
- Android开发人员不得不收集的代码(持续更新中)
- 字符串反转
- LeetCode--No.27--Remove Element
- Go如何使得Web工作