Dada una array binaria mat[][] que contiene ceros y unos. Cada fila de la array se ordena en orden no decreciente, la tarea es encontrar la columna más a la izquierda de la array con al menos un 1 en ella.
Nota: Si no existe tal columna, devuelva -1.
Ejemplos:
Input: mat[][] = {{0, 0, 0, 1} {0, 1, 1, 1} {0, 0, 1, 1}} Output: 2 Explanation: The 2nd column of the matrix contains atleast a 1. Input: mat[][] = {{0, 0, 0} {0, 1, 1} {1, 1, 1}} Output: 1 Explanation: The 1st column of the matrix contains atleast a 1. Input: mat[][] = {{0, 0} {0, 0}} Output: -1 Explanation: There is no such column which contains atleast one 1.
Acercarse:
- Aquí comenzamos nuestro recorrido desde el último elemento de la primera fila. Esto incluye dos pasos.
- Si el elemento de iteración actual es 1, decrementamos el índice de la columna. Como encontramos el índice de la columna más a la izquierda con el valor 1, no tenemos que verificar los elementos con un índice de columna mayor.
- Si el elemento de iteración actual es 0, incrementamos el índice de fila. Como ese elemento es 0, no necesitamos verificar los elementos anteriores de esa fila.
- Continuamos hasta que uno de los índices de fila o columna deje de ser válido.
A continuación se muestra la implementación del enfoque anterior.
C++
// C++ program to calculate leftmost // column having at least a 1 #include <bits/stdc++.h> using namespace std; #define N 3 #define M 4 // Function return leftmost // column having at least a 1 int FindColumn(int mat[N][M]) { int row = 0, col = M - 1; int flag = 0; while (row < N && col >= 0) { // If current element is // 1 decrement column by 1 if (mat[row][col] == 1) { col--; flag = 1; } // If current element is // 0 increment row by 1 else { row++; } } col++; if (flag) return col + 1; else return -1; } // Driver code int main() { int mat[N][M] = { { 0, 0, 0, 1 }, { 0, 1, 1, 1 }, { 0, 0, 1, 1 } }; cout << FindColumn(mat); return 0; }
Java
// Java program to calculate leftmost // column having at least a 1 import java.util.*; class GFG{ static final int N = 3; static final int M = 4; // Function return leftmost // column having at least a 1 static int FindColumn(int mat[][]) { int row = 0, col = M - 1; int flag = 0; while(row < N && col >= 0) { // If current element is // 1 decrement column by 1 if(mat[row][col] == 1) { col--; flag = 1; } // If current element is // 0 increment row by 1 else { row++; } } col++; if (flag!=0) return col + 1; else return -1; } // Driver code public static void main(String[] args) { int[][] mat = { { 0, 0, 0, 1 }, { 0, 1, 1, 1 }, { 0, 0, 1, 1 } }; System.out.print(FindColumn(mat)); } } // This code is contributed by 29AjayKumar
Python3
# Python3 program to calculate leftmost # column having at least a 1 N = 3 M = 4 # Function return leftmost # column having at least a 1 def findColumn(mat: list) -> int: row = 0 col = M - 1 while row < N and col >= 0: # If current element is # 1 decrement column by 1 if mat[row][col] == 1: col -= 1 flag = 1 # If current element is # 0 increment row by 1 else: row += 1 col += 1 if flag: return col + 1 else: return -1 # Driver Code if __name__ == "__main__": mat = [ [0, 0, 0, 1], [0, 1, 1, 1], [0, 0, 1, 1] ] print(findColumn(mat)) # This code is contributed by sanjeev2552
C#
// C# program to calculate leftmost // column having at least 1 using System; class GFG{ static readonly int N = 3; static readonly int M = 4; // Function return leftmost // column having at least a 1 static int FindColumn(int [,]mat) { int row = 0, col = M - 1; int flag = 0; while(row < N && col >= 0) { // If current element is // 1 decrement column by 1 if (mat[row, col] == 1) { col--; flag = 1; } // If current element is // 0 increment row by 1 else { row++; } } col++; if (flag != 0) return col + 1; else return -1; } // Driver code public static void Main(String[] args) { int[,] mat = { { 0, 0, 0, 1 }, { 0, 1, 1, 1 }, { 0, 0, 1, 1 } }; Console.Write(FindColumn(mat)); } } // This code is contributed by Rohit_ranjan
Javascript
<script> // JavaScript program to calculate leftmost // column having at least 1 let N = 3; let M = 4; // Function return leftmost // column having at least a 1 function FindColumn(mat) { let row = 0, col = M - 1; let flag = 0; while(row < N && col >= 0) { // If current element is // 1 decrement column by 1 if (mat[row][col] == 1) { col--; flag = 1; } // If current element is // 0 increment row by 1 else { row++; } } col++; if (flag != 0) return col + 1; else return -1; } let mat = [ [ 0, 0, 0, 1 ], [ 0, 1, 1, 1 ], [ 0, 0, 1, 1 ] ]; document.write(FindColumn(mat)); </script>
Producción:
2
Complejidad Temporal: O(N + M). donde N es el número de fila y M es el número de columna.
Complejidad espacial: O(1)
Publicación traducida automáticamente
Artículo escrito por animesh_ghosh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA