zoukankan      html  css  js  c++  java
  • 经典算法面试题目-置矩阵行列元素为0(1.7)

    题目

    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;
    }
    

    输出结果:

  • 相关阅读:
    Solution: Win 10 和 Ubuntu 16.04 LTS双系统, Win 10 不能从grub启动
    在Ubuntu上如何往fcitx里添加输入法
    LaTeX 笔记---Q&A
    Hong Kong Regional Online Preliminary 2016 C. Classrooms
    Codeforces 711E ZS and The Birthday Paradox
    poj 2342 anniversary party
    poj 1088 滑雪
    poj 2479 maximum sum
    poj 2481 cows
    poj 2352 stars
  • 原文地址:https://www.cnblogs.com/webmen/p/5739079.html
Copyright © 2011-2022 走看看