📜  在给定矩阵中按零计数排序的列的打印索引

📅  最后修改于: 2021-04-22 03:09:46             🧑  作者: Mango

给定一个具有N行M列的矩阵。任务是根据每一列中零个数的增加来打印给定矩阵的列索引。
例如,如果第一列包含2个零,则第二列包含1个零,而第三列不包含任何零。然后输出将是3、2、1。

注意:矩阵被认为具有基于1的索引。

例子:

Input : mat[N][M] ={{0, 0, 0},
                    {0, 2, 0},
                    {0, 1, 1},
                    {1, 1, 1}};
Output : 2 3 1 
No. of zeroes in first col: 3
No. of zeroes in second col: 1
No of zeroes in third col: 2
Therefore, sorted order of count is 1 2 3
and their corresponding column numbers are, 2 3 1

Input: mat[N][M] ={{0, 0, 0},
                    {0, 0, 3},
                    {0, 1, 1}};
Output : 3 2 1 

方法

  1. 创建一个成对向量,以在每列中存储零计数。该对中的第一个元素是count,而该对中的第二个元素是对应的列索引。
  2. 遍历矩阵列。
  3. 在对向量中插入每一列的零计数。
  4. 根据零的计数对对的向量进行排序。
  5. 打印该对中的第二个元素,其中包含根据零计数排序的列的索引。

下面是上述方法的实现:

C++
// C++ Program to print the index of columns
// of the given matrix based on the
// increasing number of zeroes in each column
 
#include 
 
using namespace std;
 
#define N 4 // rows
#define M 3 // columns
 
// Function to print the index of columns
// of the given matrix based on the
// increasing number of zeroes in each column
void printColumnSorted(int mat[N][M])
{
    // Vector of pair to store count of zeroes
    // in each column.
    // First element of pair is count
    // Second element of pair is column index
    vector > colZeroCount;
 
    // Traverse the matrix column wise
    for (int i = 0; i < M; i++) {
        int count = 0;
 
        for (int j = 0; j < N; j++) {
            if (mat[j][i] == 0)
                count++;
        }
 
        // Insert the count of zeroes for each column
        // in the vector of pair
        colZeroCount.push_back(make_pair(count, i));
    }
 
    // Sort the vector of pair according to the
    // count of zeroes
    sort(colZeroCount.begin(), colZeroCount.end());
 
    // Print the second element of the pair which
    // contain indexes of the sorted vector of pair
    for (int i = 0; i < M; i++)
        cout << colZeroCount[i].second + 1 << " ";
}
 
// Driver Code
int main()
{
    int mat[N][M] = { { 0, 0, 0 },
                      { 0, 2, 0 },
                      { 0, 1, 1 },
                      { 1, 1, 1 } };
 
    printColumnSorted(mat);
 
    return 0;
}


Java
// Java program to print the index of columns
// of the given matrix based on the increasing
// number of zeroes in each column
import java.io.*;
import java.util.*;
 
class GFG{
     
static int N = 4;
static int M = 3;
 
// Function to print the index of columns
// of the given matrix based on the increasing
// number of zeroes in each column
static void printColumnSorted(int[][] mat)
{
     
    // Vector of pair to store count of zeroes
    // in each column.First element of pair is
    // count.Second element of pair is column index
    ArrayList<
    ArrayList> colZeroCount = new ArrayList<
                                           ArrayList>();
     
    // Traverse the matrix column wise
    for(int i = 0; i < M; i++)
    {
        int count = 0;
        for(int j = 0; j < N; j++)
        {
            if (mat[j][i] == 0)
            {
                count++;
            }
        }
         
        // Insert the count of zeroes for
        // each column in the vector of pair
        colZeroCount.add(new ArrayList(
            Arrays.asList(count,i)));
    }
     
    // Sort the vector of pair according to the
    // count of zeroes
    Collections.sort(colZeroCount,
                     new Comparator>()
    {   
        @Override
        public int compare(ArrayList o1,
                           ArrayList o2)
        {
            return o1.get(0).compareTo(o2.get(0));
        }              
    });
     
    // Print the second element of the pair which
    // contain indexes of the sorted vector of pair
    for(int i = 0; i < M; i++)
    {
        System.out.print(
            (colZeroCount.get(i).get(1) + 1) + " ");
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int[][] mat = { { 0, 0, 0 }, { 0, 2, 0 },
                    { 0, 1, 1 }, { 1, 1, 1 } };
                     
    printColumnSorted(mat);
}
}
 
// This code is contributed by avanitrachhadiya2155


Python3
# Python3 program to print the index of
# columns of the given matrix based
# on the increasing number of zeroes
# in each column
 
# Rows
N = 4
 
# Columns
M = 3
 
# Function to print the index of columns
# of the given matrix based on the
# increasing number of zeroes in
# each column
def printColumnSorted(mat):
     
    # Vector of pair to store count
    # of zeroes in each column.
    # First element of pair is count
    # Second element of pair is column index
    colZeroCount = []
 
    # Traverse the matrix column wise
    for i in range(M):
        count = 0
 
        for j in range(N):
            if (mat[j][i] == 0):
                count += 1
 
        # Insert the count of zeroes for
        # each column in the vector of pair
        colZeroCount.append((count, i))
 
    # Sort the vector of pair according
    # to the count of zeroes
    colZeroCount = sorted(colZeroCount)
 
    # Print the second element of the
    # pair which contain indexes of the
    # sorted vector of pair
    for i in range(M):
        print(colZeroCount[i][1] + 1, end = " ")
 
# Driver Code
if __name__ == '__main__':
     
    mat = [ [ 0, 0, 0 ],
            [ 0, 2, 0 ],
            [ 0, 1, 1 ],
            [ 1, 1, 1 ] ]
 
    printColumnSorted(mat)
 
# This code is contributed mohit kumar 29


输出:
2 3 1