Encuentre el número de fila de una array binaria que tiene un número máximo de 1

Dada una array binaria (que contiene solo 0 y 1) de orden n×n. Todas las filas ya están ordenadas. Necesitamos encontrar el número de fila con el número máximo de 1s. Además, encuentre el número de 1 en esa fila. 

Nota: en caso de empate, escriba el número de fila más pequeño.

Ejemplos: 

Input : mat[3][3] = {0, 0, 1,
                     0, 1, 1,
                     0, 0, 0}
Output : Row number = 2, MaxCount = 2

Input : mat[3][3] = {1, 1, 1,
                     1, 1, 1,
                     0, 0, 0}
Output : Row number = 1, MaxCount = 3

Enfoque básico: recorrer toda la array y para cada fila encontrar el número de 1 y entre todos los que siguen actualizando el número de fila con el número máximo de 1. Este enfoque dará como resultado una complejidad de tiempo O (n ^ 2).

Mejor enfoque: podemos tener un mejor desempeño si tratamos de aplicar la búsqueda binaria para encontrar la posición del primer 1 en cada fila y, según eso, podemos encontrar el número de 1 de cada fila, ya que cada fila está ordenada. Esto dará como resultado una complejidad de tiempo O (nlogn).

Enfoque eficiente: comience con la esquina superior derecha con índice (1, n) e intente ir a la izquierda hasta llegar al último 1 en esa fila (columna j-ésima), ahora si cruzamos a la izquierda a esa fila, encontraremos 0, entonces cambie a la fila justo debajo, con la misma columna. Ahora su posición será (2, j) nuevamente en la segunda fila si el j-ésimo elemento es 1, intente ir a la izquierda hasta que encuentre el último 1; de lo contrario, en la segunda fila, si el j-ésimo elemento es 0, vaya a la siguiente fila. Entonces, finalmente, diga que si está en cualquier i-ésima fila y j-ésima columna, que es el índice del último 1 desde la derecha en esa fila, incremente i. Así que ahora, si tenemos Aij = 0 nuevamente, incremente i; de lo contrario, siga disminuyendo j hasta que encuentre el último 1 en esa fila en particular. 
Ejemplo de ilustración:

Algoritmo: 

for (int i=0, j=n-1; i<n;i++)
{
    // find left most position of 1 in a row
    // find 1st zero in a row
    while (arr[i][j]==1) 
    {
        row = i;
        j--;
    }
}
cout << "Row number =" << row+1;
cout << "MaxCount =" << n-j;

Implementación:

C++

// CPP program to find row with maximum 1
// in row sorted binary matrix
#include<bits/stdc++.h>
#define N 4
using namespace std;
 
// function for finding row with maximum 1
void findMax (int arr[][N])
{
    int row = 0, i, j;
    for (i=0, j=N-1; i<N;i++)
    {
        // find left most position of 1 in a row
        // find 1st zero in a row
        while (arr[i][j] == 1 && j >= 0)
        {
            row = i;
            j--;
        }
    }
    cout << "Row number = " << row+1;
    cout << ", MaxCount = " << N-1-j;
}
 
// driver program
int main()
{
    int arr[N][N] = {0, 0, 0, 1,
                     0, 0, 0, 1,
                     0, 0, 0, 0,
                     0, 1, 1, 1};
    findMax(arr);
    return 0;
}

Java

// Java program to find row with maximum 1
// in row sorted binary matrix
class GFG {
     
    static final int N = 4;
 
    // function for finding row with maximum 1
    static void findMax(int arr[][]) {
         
        int row = 0, i, j;
 
        for (i = 0, j = N - 1; i < N; i++) {
             
            // find left most position of 1 in
            // a row find 1st zero in a row
            while (j >= 0 && arr[i][j] == 1) {
                 
                row = i;
                j--;
            }
        }
         
        System.out.print("Row number = "
                                + (row + 1));
        System.out.print(", MaxCount = "
                               + (N - 1 - j));
    }
     
    // Driver code
    public static void main(String[] args) {
        int arr[][] = {{0, 0, 0, 1},
                       {0, 0, 0, 1},
                       {0, 0, 0, 0},
                       {0, 1, 1, 1}};
        findMax(arr);
    }
}
 
// This code is contributed by Anant Agarwal.

Python3

# python program to find row with
# maximum 1 in row sorted binary
# matrix
 
N = 4
 
# function for finding row with
# maximum 1
def findMax (arr):
    row = 0
    j = N - 1
    for i in range(0, N):
        # find left most position
        # of 1 in a row find 1st
        # zero in a row
        while (arr[i][j] == 1
                     and j >= 0):
            row = i
            j -= 1
         
    print("Row number = " , row + 1,
         ", MaxCount = ", N - 1 - j)
 
# driver program
arr = [ [0, 0, 0, 1],
        [0, 0, 0, 1],
        [0, 0, 0, 0],
        [0, 1, 1, 1] ]
         
findMax(arr)
 
# This code is contributed by Sam007

C#

// C# program to find row with maximum
// 1 in row sorted binary matrix
using System;
 
class GFG {
     
    static int N = 4;
 
    // function for finding row with maximum 1
    static void findMax(int [,]arr)
    {
        int row = 0, i, j;
 
        for (i = 0, j = N - 1; i < N; i++) {
             
            // find left most position of 1 in
            // a row find 1st zero in a row
            while (arr[i,j] == 1 && j >= 0)
            {
                row = i;
                j--;
            }
        }
         
        Console.Write("Row number = " + (row + 1));
        Console.Write(", MaxCount = " + (N - 1 - j));
    }
     
    // Driver code
    public static void Main()
    {
        int [,]arr = {{0, 0, 0, 1},
                      {0, 0, 0, 1},
                      {0, 0, 0, 0},
                      {0, 1, 1, 1}};
        findMax(arr);
    }
}
 
// This code is contributed by nitin mittal

PHP

<?php
// PHP program to find
// row with maximum 1
// in row sorted
// binary matrix
$N = 4;
 
 
// function for finding
// row with maximum 1
function findMax ($arr)
{
     
    global $N;
    $row = 0; $i;
    $j=$N - 1;
    for ($i = 0; $i < $N; $i++)
    {
         
        // find left most position
        // of 1 in a row find 1st
        // zero in a row
        while ($arr[$i][$j] == 1 &&
                           $j >= 0)
        {
            $row = $i;
            $j--;
        }
    }
    echo "Row number = " , $row + 1;
    echo ", MaxCount = " , $N - 1 - $j;
}
 
    // Driver Code
    $arr = array(array(0, 0, 0, 1),
                 array(0, 0, 0, 1),
                 array(0, 0, 0, 0),
                 array(0, 1, 1, 1));
    findMax($arr);
 
// This code is contributed by vt_m.
?>

Javascript

<script>
 
 
// Javascript program to find row with maximum 1
// in row sorted binary matrix
var N = 4
 
// function for finding row with maximum 1
function findMax (arr)
{
    var row = 0, i, j;
    for (i=0, j=N-1; i<N;i++)
    {
        // find left most position of 1 in a row
        // find 1st zero in a row
        while (arr[i][j] == 1 && j >= 0)
        {
            row = i;
            j--;
        }
    }
    document.write( "Row number = " + (row+1));
    document.write( ", MaxCount = " + (N-1-j));
}
 
// driver program
var arr = [[0, 0, 0, 1],
                 [0, 0, 0, 1],
                 [0, 0, 0, 0],
                 [0, 1, 1, 1]];
findMax(arr);
 
 
</script>
Producción

Row number = 4, MaxCount = 3

Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)

Este artículo es una contribución de Shivam Pradhan (anuj_charm) . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *