• 矩阵置零(C++解法)


    题目

    给定一个 m x n 的矩阵,如果一个元素为 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法

    示例 1:

    输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
    输出:[[1,0,1],[0,0,0],[1,0,1]]
    

    示例 2:

    输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
    输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

    C++代码

    1. #include
    2. #include
    3. using namespace std;
    4. /*
    5. * 定义矩阵置零函数
    6. * 使用两个标记变量flag_row0,flag_col0分别记录第一行和第一列是否原本包含0
    7. * 其他行列元素如果为0,改变元素所在第一行第一列为0
    8. * 反过来使用第一行与第一列去更新其他行与列
    9. * 使用两个标记变量更新第一行与第一列
    10. */
    11. void setZeroes(vectorint>>& matrix) {
    12. int m = matrix.size();
    13. int n = matrix[0].size();
    14. int flag_col0 = false, flag_row0 = false;
    15. for (int i = 0; i < m; ++i) {
    16. if (!matrix[i][0]) {
    17. flag_col0 = true;
    18. }
    19. }
    20. for (int j = 0; j < n; ++j) {
    21. if (!matrix[0][j]) {
    22. flag_row0 = true;
    23. }
    24. }
    25. for (int i = 1; i < m; ++i) {
    26. for (int j = 1; j < n; ++j) {
    27. if (!matrix[i][j]) {
    28. matrix[i][0] = matrix[0][j] = 0;
    29. }
    30. }
    31. }
    32. for (int i = 1; i < m; ++i) {
    33. for (int j = 1; j < n; ++j) {
    34. if (!matrix[i][0] || !matrix[0][j]) {
    35. matrix[i][j] = 0;
    36. }
    37. }
    38. }
    39. for (int i = 0; i < m; ++i) {
    40. if (flag_col0) {
    41. matrix[i][0] = 0;
    42. }
    43. }
    44. for (int j = 0; j < n; ++j) {
    45. if (flag_row0) {
    46. matrix[0][j] = 0;
    47. }
    48. }
    49. }
    50. int main() {
    51. vectorint>> matrix = { {0,1,2,0},{3,4,5,2},{1,3,1,5} };
    52. setZeroes(matrix);
    53. for (int i = 0; i < matrix.size(); ++i) {
    54. for (int j = 0; j < matrix[0].size(); ++j) {
    55. cout << matrix[i][j] << " ";
    56. }
    57. cout << endl;
    58. }
    59. return 0;
    60. }

    分析

    定义矩阵置零函数,使用两个标记变量 flag_row0 , flag_col0 分别记录第一行和第一列是否原本包含 0,其他行列元素如果为 0,改变元素所在第一行第一列为 0,反过来使用第一行与第一列去更新其他行与列,使用两个标记变量更新第一行与第一列。

  • 相关阅读:
    机器视觉分析在加油站安全中的应用:使用手机检测、打电话行为识别
    虚拟机部署linux网络连接配置
    重庆大学c++2022级-期末模拟考试
    docker安装Elasticsearch
    SVN使用
    元宇宙电商-NFG系统,是如何让数字藏品流通的?
    如何在 Ubuntu 22.04 上安装 最新版本Wine
    常数时间介绍
    京东JAVA面试心得与面试题详解
    uniapp相关技术
  • 原文地址:https://blog.csdn.net/m0_62275194/article/details/133887776