【面试经典150 | 矩阵】矩阵置零
写在前面
本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……
专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:
- Tag:介绍本题牵涉到的知识点、数据结构;
- 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
- 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
- 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
- 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。
Tag
【矩阵】【数组】
题目来源
题目解读
将矩阵中 0
元素的那一行和那一列所有元素都置为 0
。
解题思路
方法一: O ( m n ) O(mn) O(mn) 空间复杂度
最朴素的方法也是最简单的方法就是使用一个大小和原数组一样的数组作为答案数组 res
,当 matrix[i][j]
等于 0
时,更新 res
的 i
行 j
列 元素均为 0
。
实现代码
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
multimap<int, int> hash;
int i, j, k;
for(i = 0; i < m; ++i){
for(j = 0; j < n; ++j){
if(matrix[i][j] == 0){
hash.insert({i, j});
}
}
}
for(auto [a, b] : hash){
// 行
for(k = 0; k < n; ++k){
matrix[a][k] = 0;
}
// 列
for(k = 0; k < m; ++k){
matrix[k][b] = 0;
}
}
}
};
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: