Vzhľadom na binárnu maticu n x n (prvky v matrici môžu byť buď 1 alebo 0), kde je každý riadok a stĺpec matrice zoradený podľa počtu počtu počtu príkazov 0 s prítomným v ňom.
Príklady:
konektivita java
Vstup:
[0 0 0 0 1]
[0 0 0 1 1]
[0 1 1 1]
[1 1 1 1 1]
[1 1 1 1 1]
Výstup: 8
Vstup:
[0 0]
[0 0]
Výstup: 4
Vstup:
[1 1 1 1]
[1 1 1 1]
[1 1 1 1]
[1 1 1 1]
Výstup:
Myšlienka je veľmi jednoduchá. Začneme z ľavého dolného rohu matrice a opakujeme nižšie kroky, až kým nenájdeme horný alebo pravý okraj matrice.
- Index radov, kým nenájdeme 0.
- Pridajte číslo 0S v aktuálnom stĺpci, t. J. Aktuálny index riadkov + 1 k výsledku a presuňte sa doprava na ďalší stĺpec (index prírastku COL o 1).
Vyššie uvedená logika bude fungovať, pretože matica je zoradená v riadku a stĺpcový. Logika bude tiež pracovať pre akúkoľvek maticu obsahujúcu nezáporné celé čísla.
Nižšie je uvedená implementácia vyššie uvedenej myšlienky:
C++#include #include using namespace std; // Function to count number of 0s in the given // row-wise and column-wise sorted binary matrix. int countZeroes(const vector<vector<int>>& mat) { int n = mat.size(); // start from the bottom-left corner int row = n - 1 col = 0; int count = 0; while (col < n) { // move up until you find a 0 while (row >= 0 && mat[row][col]) { row--; } // add the number of 0s in the current // column to the result count += (row + 1); // move to the next column col++; } return count; } int main() { vector<vector<int>> mat = { { 0 0 0 0 1 } { 0 0 0 1 1 } { 0 1 1 1 1 } { 1 1 1 1 1 } { 1 1 1 1 1 } }; cout << countZeroes(mat); return 0; }
C // C program to count number of 0s in the given // row-wise and column-wise sorted binary matrix. #include // define size of square matrix #define N 5 // Function to count number of 0s in the given // row-wise and column-wise sorted binary matrix. int countZeroes(int mat[N][N]) { // start from bottom-left corner of the matrix int row = N - 1 col = 0; // stores number of zeroes in the matrix int count = 0; while (col < N) { // move up until you find a 0 while (mat[row][col]) // if zero is not found in current column // we are done if (--row < 0) return count; // add 0s present in current column to result count += (row + 1); // move right to next column col++; } return count; } // Driver Program to test above functions int main() { int mat[N][N] = { { 0 0 0 0 1 } { 0 0 0 1 1 } { 0 1 1 1 1 } { 1 1 1 1 1 } { 1 1 1 1 1 } }; printf('%d'countZeroes(mat)); return 0; }
Java import java.util.Arrays; public class GfG { // Function to count number of 0s in the given // row-wise and column-wise sorted binary matrix. public static int countZeroes(int[][] mat) { int n = mat.length; // start from the bottom-left corner int row = n - 1 col = 0; int count = 0; while (col < n) { // move up until you find a 0 while (row >= 0 && mat[row][col] == 1) { row--; } // add the number of 0s in the current // column to the result count += (row + 1); // move to the next column col++; } return count; } public static void main(String[] args) { int[][] mat = { { 0 0 0 0 1 } { 0 0 0 1 1 } { 0 1 1 1 1 } { 1 1 1 1 1 } { 1 1 1 1 1 } }; System.out.println(countZeroes(mat)); } }
Python # Function to count number of 0s in the given # row-wise and column-wise sorted binary matrix. def count_zeroes(mat): n = len(mat) # start from the bottom-left corner row = n - 1 col = 0 count = 0 while col < n: # move up until you find a 0 while row >= 0 and mat[row][col]: row -= 1 # add the number of 0s in the current # column to the result count += (row + 1) # move to the next column col += 1 return count if __name__ == '__main__': mat = [ [0 0 0 0 1] [0 0 0 1 1] [0 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1] ] print(count_zeroes(mat))
C# // Function to count number of 0s in the given // row-wise and column-wise sorted binary matrix. using System; using System.Collections.Generic; class Program { static int CountZeroes(int[] mat) { int n = mat.GetLength(0); // start from the bottom-left corner int row = n - 1 col = 0; int count = 0; while (col < n) { // move up until you find a 0 while (row >= 0 && mat[row col] == 1) { row--; } // add the number of 0s in the current // column to the result count += (row + 1); // move to the next column col++; } return count; } static void Main() { int[] mat = { { 0 0 0 0 1 } { 0 0 0 1 1 } { 0 1 1 1 1 } { 1 1 1 1 1 } { 1 1 1 1 1 } }; Console.WriteLine(CountZeroes(mat)); } }
JavaScript // Function to count number of 0s in the given // row-wise and column-wise sorted binary matrix. function countZeroes(mat) { const n = mat.length; // start from the bottom-left corner let row = n - 1 col = 0; let count = 0; while (col < n) { // move up until you find a 0 while (row >= 0 && mat[row][col]) { row--; } // add the number of 0s in the current // column to the result count += (row + 1); // move to the next column col++; } return count; } const mat = [ [0 0 0 0 1] [0 0 0 1 1] [0 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1] ]; console.log(countZeroes(mat));
Výstup
8
Zložitosť z vyššie uvedeného roztoku je O (n), pretože roztok sleduje jednu cestu od ľavého dolného rohu po horný alebo pravý okraj matrice.
Pomocný priestor Používa sa v programe O (1). Pretože sa nezaoberal žiadny ďalší priestor.
ako zistiť veľkosť displeja