Find the row with maximum number of 1s - GeeksforGeeks

25 Apr, 2022
Given a boolean 2D array, where each row is sorted. Find the row with the maximum number of 1s. 
Example:  
Input matrix
0 1 1 1
0 0 1 1
1 1 1 1  // this row has maximum 1s
0 0 0 0

Output: 2
A simple method is to do a row wise traversal of the matrix, count the number of 1s in each row and compare the count with max. Finally, return the index of row with maximum 1s. The time complexity of this method is O(m*n) where m is number of rows and n is number of columns in matrix.
Implementation of Simple Approach:
C++
Java
Python3
C#
Javascript
// CPP program to find the row// with maximum number of 1s#include <bits/stdc++.h>using namespace std;#define R 4#define C 4 // Function that returns index of row// with maximum number of 1s.int rowWithMax1s(bool mat[R][C]) {    // code here    int rowIndex = -1 ;    int maxCount = 0 ;         for(int i = 0 ; i < R ; i++){        int count = 0 ;        for(int j = 0 ; j < C ; j++ ){            if(mat[i][j] == 1){                count++ ;            }        }        if(count > maxCount){            maxCount = count ;            rowIndex = i ;        }    }         return rowIndex ;}  // Driver Codeint main(){    bool mat[R][C] = { {0, 0, 0, 1},                    {0, 1, 1, 1},                    {1, 1, 1, 1},                    {0, 0, 0, 0}};     cout << "Index of row with maximum 1s is " << rowWithMax1s(mat);     return 0;}
// Java program for the above approachimport java.util.*; class GFG { static int R = 4 ;static int C  = 4 ; // Function to find the index of first index// of 1 in a boolean array arr[]static int first(int arr[], int low, int high){    if(high >= low)    {        // Get the middle index        int mid = low + (high - low)/2;             // Check if the element at middle index is first 1        if ( ( mid == 0 || arr[mid-1] == 0) && arr[mid] == 1)            return mid;             // If the element is 0, recur for right side        else if (arr[mid] == 0)            return first(arr, (mid + 1), high);                 // If element is not first 1, recur for left side        else            return first(arr, low, (mid -1));    }    return -1;} // Function that returns index of row// with maximum number of 1s.static int rowWithMax1s(int mat[][]){    // Initialize max values    int max_row_index = 0, max = -1;     // Traverse for each row and count number of 1s    // by finding the index of first 1    int i, index;    for (i = 0; i < R; i++)    {        index = first (mat[i], 0, C-1);        if (index != -1 && C-index > max)        {            max = C - index;            max_row_index = i;        }    }     return max_row_index;}     // Driver Code    public static void main(String[] args) {             int mat[][] = { {0, 0, 0, 1},                    {0, 1, 1, 1},                    {1, 1, 1, 1},                    {0, 0, 0, 0}};     System.out.print("Index of row with maximum 1s is " + rowWithMax1s(mat));     }}
# Python implementation of the approachR,C = 4,4 # Function to find the index of first index# of 1 in a boolean array arrdef first(arr , low , high):     if(high >= low):         # Get the middle index        mid = low + (high - low)//2             # Check if the element at middle index is first 1        if ( ( mid == 0 or arr[mid-1] == 0) and arr[mid] == 1):            return mid             # If the element is 0, recur for right side        elif (arr[mid] == 0):            return first(arr, (mid + 1), high);                 # If element is not first 1, recur for left side        else:            return first(arr, low, (mid -1));     return -1 # Function that returns index of row# with maximum number of 1s.def rowWithMax1s(mat):     # Initialize max values    max_row_index,Max = 0,-1     # Traverse for each row and count number of 1s    # by finding the index of first 1    for i in range(R):         index = first (mat[i], 0, C-1)        if (index != -1 and C-index > Max):            Max = C - index;            max_row_index = i     return max_row_index # Driver Codemat = [[0, 0, 0, 1],       [0, 1, 1, 1],       [1, 1, 1, 1],       [0, 0, 0, 0]]print("Index of row with maximum 1s is " + str(rowWithMax1s(mat))) # This code is contributed by shinjanpatra
// C# program for the above approachusing System;using System.Collections.Generic; public class GFG {   static int R = 4;  static int C = 4;   // Function to find the index of first index  // of 1 in a bool array []arr  static int first(int []arr, int low, int high) {    if (high >= low)    {       // Get the middle index      int mid = low + (high - low) / 2;       // Check if the element at middle index is first 1      if ((mid == 0 || arr[mid - 1] == 0) && arr[mid] == 1)        return mid;       // If the element is 0, recur for right side      else if (arr[mid] == 0)        return first(arr, (mid + 1), high);       // If element is not first 1, recur for left side      else        return first(arr, low, (mid - 1));    }    return -1;  }  public static int[] GetRow(int[,] matrix, int row)  {    var rowLength = matrix.GetLength(1);    var rowVector = new int[rowLength];     for (var i = 0; i < rowLength; i++)      rowVector[i] = matrix[row, i];     return rowVector;  }   // Function that returns index of row  // with maximum number of 1s.  static int rowWithMax1s(int [,]mat)  {     // Initialize max values    int max_row_index = 0, max = -1;     // Traverse for each row and count number of 1s    // by finding the index of first 1    int i, index;    for (i = 0; i < R; i++) {      int []row = GetRow(mat,i);      index = first(row, 0, C - 1);      if (index != -1 && C - index > max) {        max = C - index;        max_row_index = i;      }    }     return max_row_index;  }   // Driver Code  public static void Main(String[] args) {     int [,]mat = { { 0, 0, 0, 1 },                  { 0, 1, 1, 1 },                  { 1, 1, 1, 1 },                  { 0, 0, 0, 0 } };     Console.Write("Index of row with maximum 1s is " + rowWithMax1s(mat));   }} // This code is contributed by Rajput-Ji
<script>// javascript program for the above approach var R = 4 ;var C  = 4 ; // Function to find the index of first index// of 1 in a boolean array arrfunction first(arr , low , high){    if(high >= low)    {        // Get the middle index        var mid = low + parseInt((high - low)/2);             // Check if the element at middle index is first 1        if ( ( mid == 0 || arr[mid-1] == 0) && arr[mid] == 1)            return mid;             // If the element is 0, recur for right side        else if (arr[mid] == 0)            return first(arr, (mid + 1), high);                 // If element is not first 1, recur for left side        else            return first(arr, low, (mid -1));    }    return -1;} // Function that returns index of row// with maximum number of 1s.function rowWithMax1s(mat){     // Initialize max values    var max_row_index = 0, max = -1;     // Traverse for each row and count number of 1s    // by finding the index of first 1    var i, index;    for (i = 0; i < R; i++)    {        index = first (mat[i], 0, C-1);        if (index != -1 && C-index > max)        {            max = C - index;            max_row_index = i;        }    }    return max_row_index;}     // Driver Code        var mat = [[0, 0, 0, 1],                [0, 1, 1, 1],                [1, 1, 1, 1],                [0, 0, 0, 0]];    document.write("Index of row with maximum 1s is " + rowWithMax1s(mat)); // This code is contributed by Rajput-Ji</script>
Index of row with maximum 1s is 2
Time Complexity:  O(m*n)
Space Complexity:  O(1)
We can do better. Since each row is sorted, we can use Binary Search to count of 1s in each row. We find the index of first instance of 1 in each row. The count of 1s will be equal to total number of columns minus the index of first 1.
See the following code for implementation of the above approach.  
C++
C
Java
Python3
C#
PHP
Javascript
// CPP program to find the row// with maximum number of 1s#include <bits/stdc++.h>using namespace std;#define R 4#define C 4 // Function to find the index of first index// of 1 in a boolean array arr[]int first(bool arr[], int low, int high){    if(high >= low)    {        // Get the middle index        int mid = low + (high - low)/2;             // Check if the element at middle index is first 1        if ( ( mid == 0 || arr[mid-1] == 0) && arr[mid] == 1)            return mid;             // If the element is 0, recur for right side        else if (arr[mid] == 0)            return first(arr, (mid + 1), high);                 // If element is not first 1, recur for left side        else            return first(arr, low, (mid -1));    }    return -1;} // Function that returns index of row// with maximum number of 1s.int rowWithMax1s(bool mat[R][C]){    // Initialize max values    int max_row_index = 0, max = -1;     // Traverse for each row and count number of 1s    // by finding the index of first 1    int i, index;    for (i = 0; i < R; i++)    {        index = first (mat[i], 0, C-1);        if (index != -1 && C-index > max)        {            max = C - index;            max_row_index = i;        }    }     return max_row_index;} // Driver Codeint main(){    bool mat[R][C] = { {0, 0, 0, 1},                    {0, 1, 1, 1},                    {1, 1, 1, 1},                    {0, 0, 0, 0}};     cout << "Index of row with maximum 1s is " << rowWithMax1s(mat);     return 0;} // This is code is contributed by rathbhupendra
// C program to find the row// with maximum number of 1s#include <stdio.h>#define R 4#define C 4 // Function to find the index of first index// of 1 in a boolean array arr[]int first(bool arr[], int low, int high){if(high >= low){    // Get the middle index    int mid = low + (high - low)/2;     // Check if the element at middle index is first 1    if ( ( mid == 0 || arr[mid-1] == 0) && arr[mid] == 1)    return mid;     // If the element is 0, recur for right side    else if (arr[mid] == 0)    return first(arr, (mid + 1), high);         // If element is not first 1, recur for left side    else    return first(arr, low, (mid -1));}return -1;} // Function that returns index of row// with maximum number of 1s.int rowWithMax1s(bool mat[R][C]){    // Initialize max values    int max_row_index = 0, max = -1;     // Traverse for each row and count number of 1s    // by finding the index of first 1    int i, index;    for (i = 0; i < R; i++)    {    index = first (mat[i], 0, C-1);    if (index != -1 && C-index > max)    {        max = C - index;        max_row_index = i;    }    }     return max_row_index;} // Driver Codeint main(){    bool mat[R][C] = { {0, 0, 0, 1},                       {0, 1, 1, 1},                       {1, 1, 1, 1},                       {0, 0, 0, 0}};     printf("Index of row with maximum 1s is %d "                                , rowWithMax1s(mat));     return 0;}
// Java program to find the row// with maximum number of 1simport java.io.*; class GFG {    static int R = 4, C = 4;    // Function to find the index of first index    // of 1 in a boolean array arr[]    static int first(int arr[], int low, int high)    {        if (high >= low) {            // Get the middle index            int mid = low + (high - low) / 2;             // Check if the element at middle index is first 1            if ((mid == 0 || (arr[mid - 1] == 0)) && arr[mid] == 1)                return mid;             // If the element is 0, recur for right side            else if (arr[mid] == 0)                return first(arr, (mid + 1), high);                             // If element is not first 1, recur for left side            else                return first(arr, low, (mid - 1));        }        return -1;    }     // Function that returns index of row    // with maximum number of 1s.    static int rowWithMax1s(int mat[][])    {        // Initialize max values        int max_row_index = 0, max = -1;         // Traverse for each row and count number of        // 1s by finding the index of first 1        int i, index;        for (i = 0; i < R; i++) {            index = first(mat[i], 0, C - 1);            if (index != -1 && C - index > max) {                max = C - index;                max_row_index = i;            }        }         return max_row_index;    }    // Driver Code    public static void main(String[] args)    {        int mat[][] = { { 0, 0, 0, 1 },                        { 0, 1, 1, 1 },                        { 1, 1, 1, 1 },                        { 0, 0, 0, 0 } };        System.out.println("Index of row with maximum 1s is "                                            + rowWithMax1s(mat));    }} // This code is contributed by 'Gitanjali'.
# Python3 program to find the row# with maximum number of 1s # Function to find the index# of first index of 1 in a# boolean array arr[]def first( arr, low, high):    if high >= low:                 # Get the middle index        mid = low + (high - low)//2         # Check if the element at        # middle index is first 1        if (mid == 0 or arr[mid - 1] == 0) and arr[mid] == 1:            return mid         # If the element is 0,        # recur for right side        elif arr[mid] == 0:            return first(arr, (mid + 1), high)             # If element is not first 1,        # recur for left side        else:            return first(arr, low, (mid - 1))    return -1 # Function that returns# index of row with maximum# number of 1s.def rowWithMax1s( mat):         # Initialize max values    R = len(mat)    C = len(mat[0])    max_row_index = 0    max = -1         # Traverse for each row and    # count number of 1s by finding    #  the index of first 1    for i in range(0, R):        index = first (mat[i], 0, C - 1)        if index != -1 and C - index > max:            max = C - index            max_row_index = i     return max_row_index # Driver Codemat = [[0, 0, 0, 1],       [0, 1, 1, 1],       [1, 1, 1, 1],       [0, 0, 0, 0]]print ("Index of row with maximum 1s is",      rowWithMax1s(mat)) # This code is contributed# by shreyanshi_arun
// C# program to find the row with maximum// number of 1susing System; class GFG{public static int R = 4, C = 4; // Function to find the index of first index// of 1 in a boolean array arr[]public static int first(int[] arr,                        int low, int high){    if (high >= low)    {        // Get the middle index        int mid = low + (high - low) / 2;         // Check if the element at middle        // index is first 1        if ((mid == 0 || (arr[mid - 1] == 0)) &&                          arr[mid] == 1)        {            return mid;        }         // If the element is 0, recur        // for right side        else if (arr[mid] == 0)        {            return first(arr, (mid + 1), high);        }         // If element is not first 1, recur        // for left side        else        {            return first(arr, low, (mid - 1));        }    }    return -1;} // Function that returns index of row// with maximum number of 1s.public static int rowWithMax1s(int[][] mat){    // Initialize max values    int max_row_index = 0, max = -1;     // Traverse for each row and count number     // of 1s by finding the index of first 1    int i, index;    for (i = 0; i < R; i++)    {        index = first(mat[i], 0, C - 1);        if (index != -1 && C - index > max)        {            max = C - index;            max_row_index = i;        }    }     return max_row_index;} // Driver Codepublic static void Main(string[] args){    int[][] mat = new int[][]    {        new int[] {0, 0, 0, 1},        new int[] {0, 1, 1, 1},        new int[] {1, 1, 1, 1},        new int[] {0, 0, 0, 0}    };    Console.WriteLine("Index of row with maximum 1s is " +                                       rowWithMax1s(mat));}} // This code is contributed by Shrikant13
<?php// PHP program to find the row// with maximum number of 1sdefine("R", 4);define("C", 4); // Function to find the index of first// index of 1 in a boolean array arr[]function first($arr, $low, $high){    if($high >= $low)    {        // Get the middle index        $mid = $low + intval(($high - $low) / 2);             // Check if the element at middle        // index is first 1        if (($mid == 0 || $arr[$mid - 1] == 0) &&                          $arr[$mid] == 1)        return $mid;             // If the element is 0, recur for        // right side        else if ($arr[$mid] == 0)        return first($arr, ($mid + 1), $high);                 // If element is not first 1, recur        // for left side        else        return first($arr, $low, ($mid - 1));    }    return -1;} // Function that returns index of row// with maximum number of 1s.function rowWithMax1s($mat){         // Initialize max values    $max_row_index = 0;    $max = -1;     // Traverse for each row and count number    // of 1s by finding the index of first 1         for ($i = 0; $i < R; $i++)    {    $index = first ($mat[$i], 0, (C - 1));    if ($index != -1 && (C - $index) > $max)    {        $max = C - $index;        $max_row_index = $i;    }    }     return $max_row_index;} // Driver Code$mat = array(array(0, 0, 0, 1),             array(0, 1, 1, 1),             array(1, 1, 1, 1),             array(0, 0, 0, 0)); echo "Index of row with maximum 1s is " .                                    rowWithMax1s($mat); // This code is contributed by rathbhupendra?>
<script>    // JavaScript program to find the row    // with maximum number of 1s     R = 4    C = 4     // Function to find the index of first index    // of 1 in a boolean array arr[]    const first = (arr, low, high) => {        if (high >= low) {            // Get the middle index            let mid = low + parseInt((high - low) / 2);             // Check if the element at middle index is first 1            if ((mid == 0 || arr[mid - 1] == 0) && arr[mid] == 1)                return mid;             // If the element is 0, recur for right side            else if (arr[mid] == 0)                return first(arr, (mid + 1), high);             // If element is not first 1, recur for left side            else                return first(arr, low, (mid - 1));        }        return -1;    }     // Function that returns index of row    // with maximum number of 1s.    const rowWithMax1s = (mat) => {        // Initialize max values        let max_row_index = 0, max = -1;         // Traverse for each row and count number of 1s        // by finding the index of first 1        let i, index;        for (i = 0; i < R; i++) {            index = first(mat[i], 0, C - 1);            if (index != -1 && C - index > max) {                max = C - index;                max_row_index = i;            }        }         return max_row_index;    }     // Driver Code     let mat = [        [0, 0, 0, 1],        [0, 1, 1, 1],        [1, 1, 1, 1],        [0, 0, 0, 0]    ];     document.write(`Index of row with maximum 1s is ${rowWithMax1s(mat)}`);         // This code is contributed by rakeshsahni </script>
Index of row with maximum 1s is 2
Time Complexity: O(mLogn) where m is number of rows and n is number of columns in matrix.The above solution can be optimized further. Instead of doing binary search in every row, we first check whether the row has more 1s than max so far. If the row has more 1s, then only count 1s in the row. Also, to count 1s in a row, we don’t do binary search in complete row, we do search in before the index of last max. 
Following is an optimized version of the above solution.  
C++
C
Java
Python3
C#
Javascript
#include <bits/stdc++.h>using namespace std; // The main function that returns index// of row with maximum number of 1s.int rowWithMax1s(bool mat[R][C]){    int i, index;     // Initialize max using values from first row.    int max_row_index = 0;    int max = first(mat[0], 0, C - 1);     // Traverse for each row and count number of 1s    // by finding the index of first 1    for (i = 1; i < R; i++)    {        // Count 1s in this row only if this row        // has more 1s than max so far         // Count 1s in this row only if this row        // has more 1s than max so far        if (max != -1 && mat[i][C - max - 1] == 1)        {            // Note the optimization here also            index = first (mat[i], 0, C - max);             if (index != -1 && C - index > max)            {                max = C - index;                max_row_index = i;            }        }        else        {            max = first(mat[i], 0, C - 1);        }    }    return max_row_index;} // This code is contributed by rathbhupendra
// The main function that returns index of row with maximum number of 1s.int rowWithMax1s(bool mat[R][C]){    int i, index;      // Initialize max using values from first row.     int max_row_index = 0;    int max = first(mat[0], 0, C-1);      // Traverse for each row and count number of 1s by finding the index    // of first 1    for (i = 1; i < R; i++)    {        // Count 1s in this row only if this row has more 1s than        // max so far         // Count 1s in this row only if this row has more 1s than        // max so far        if (max != -1 && mat[i][C-max-1] == 1)        {            // Note the optimization here also            index = first (mat[i], 0, C-max);              if (index != -1 && C-index > max)            {                max = C - index;                max_row_index = i;            }          }        else {            max = first(mat[i], 0, C - 1);        }      }      return max_row_index;}
public class gfg{  // The main function that returns index  // of row with maximum number of 1s.   static int rowWithMax1s(boolean mat[][])   {     int i, index;      // Initialize max using values from first row.     int max_row_index = 0;     int max = first(mat[0], 0, C - 1);      // Traverse for each row and count number of 1s     // by finding the index of first 1     for (i = 1; i < R; i++)     {       // Count 1s in this row only if this row       // has more 1s than max so far        // Count 1s in this row only if this row       // has more 1s than max so far       if (max != -1 && mat[i][C - max - 1] == 1)       {         // Note the optimization here also         index = first (mat[i], 0, C - max);          if (index != -1 && C - index > max)         {           max = C - index;           max_row_index = i;         }       }       else      {         max = first(mat[i], 0, C - 1);       }     }     return max_row_index;   }} // This code is contributed by divyesh072019.
# The main function that returns index# of row with maximum number of 1s.def rowWithMax1s(mat) :      # Initialize max using values from first row.    max_row_index = 0;    max = first(mat[0], 0, C - 1)     # Traverse for each row and count number of 1s    # by finding the index of first 1    for i in range(1, R):               # Count 1s in this row only if this row        # has more 1s than max so far         # Count 1s in this row only if this row        # has more 1s than max so far        if (max != -1 and mat[i][C - max - 1] == 1):                       # Note the optimization here also            index = first (mat[i], 0, C - max)             if (index != -1 and C - index > max):                max = C - index                max_row_index = i        else:            max = first(mat[i], 0, C - 1)               return max_row_index; # This code is contributed by Dharanendra L V
using System;class GFG{         // The main function that returns index    // of row with maximum number of 1s.     static int rowWithMax1s(bool[,] mat)     {         int i, index;                // Initialize max using values from first row.         int max_row_index = 0;         int max = first(mat[0], 0, C - 1);                // Traverse for each row and count number of 1s         // by finding the index of first 1         for (i = 1; i < R; i++)         {                       // Count 1s in this row only if this row             // has more 1s than max so far                    // Count 1s in this row only if this row             // has more 1s than max so far             if (max != -1 && mat[i,C - max - 1] == 1)             {                 // Note the optimization here also                 index = first (mat[i], 0, C - max);                        if (index != -1 && C - index > max)                 {                     max = C - index;                     max_row_index = i;                 }             }             else            {                 max = first(mat[i], 0, C - 1);             }         }         return max_row_index;     }} // This code is contributed by divyeshrabadiya07.
<script>     // The main function that returns index// of row with maximum number of 1s.function rowWithMax1s(mat){    let i, index;         // Initialize max using values from first row.    let max_row_index = 0;    let max = first(mat[0], 0, C - 1);         // Traverse for each row and count number of 1s    // by finding the index of first 1    for(i = 1; i < R; i++)    {                 // Count 1s in this row only if this row        // has more 1s than max so far                 // Count 1s in this row only if this row        // has more 1s than max so far        if (max != -1 && mat[i][C - max - 1] == 1)        {                         // Note the optimization here also            index = first (mat[i], 0, C - max);                         if (index != -1 && C - index > max)            {                max = C - index;                max_row_index = i;            }        }        else        {            max = first(mat[i], 0, C - 1);        }    }    return max_row_index;} // This code is contributed by suresh07 </script>
The worst case time complexity of the above optimized version is also O(mLogn), the will solution work better on average. Thanks to Naveen Kumar Singh for suggesting the above solution. 
The worst case of the above solution occurs for a matrix like following. 0 0 0 ... 0 1 0 0 0 ..0 1 1 0 ... 0 1 1 1 ....0 1 1 1 1
Following method works in O(m+n) time complexity in worst case. Step1: Get the index of first (or leftmost) 1 in the first row.Step2: Do following for every row after the first row ...IF the element on left of previous leftmost 1 is 0, ignore this row. ...ELSE Move left until a 0 is found. Update the leftmost index to this index and max_row_index to be the current row.The time complexity is O(m+n) because we can possibly go as far left as we came ahead in the first step.
Following is the implementation of this method.
C++
Java
Python3
C#
Javascript
// C++ program to find the row with maximum// number of 1s#include <bits/stdc++.h>using namespace std;#define R 4#define C 4// The main function that returns index of row with maximum// number of 1s.int rowWithMax1s(bool mat[R][C]){    // Initialize first row as row with max 1s    int j,max_row_index = 0;    j = C - 1;     for (int i = 0; i < R; i++) {        // Move left until a 0 is found      bool flag=false; //to check whether a row has more 1's than previous        while (j >= 0 && mat[i][j] == 1) {            j = j - 1; // Update the index of leftmost 1                       // seen so far          flag=true ;//present row has more 1's than previous          }      // if the present row has more 1's than previous      if(flag){            max_row_index = i; // Update max_row_index        }    }      if(max_row_index==0&&mat[0][C-1]==0)            return -1;    return max_row_index;}// Driver Codeint main(){    bool mat[R][C] = { {0, 0, 0, 1},                    {0, 1, 1, 1},                    {1, 1, 1, 1},                    {0, 0, 0, 0}};      cout << "Index of row with maximum 1s is " << rowWithMax1s(mat);      return 0;}// this code is contributed by Rishabh Chauhan
// Java program to find the row// with maximum number of 1simport java.io.*; class GFG {    static int R = 4, C = 4;    // Function that returns index of row    // with maximum number of 1s.    static int rowWithMax1s(int mat[][])    {        // Initialize first row as row with max 1s        int j,max_row_index = 0;            j = C - 1;         for (int i = 0; i < R; i++) {            // Move left until a 0 is found            while (j >= 0 && mat[i][j] == 1) {                j = j - 1; // Update the index of leftmost 1                       // seen so far                max_row_index = i; // Update max_row_index            }        }          if(max_row_index==0&&mat[0][C-1]==0)              return -1;        return max_row_index;    }    // Driver Code    public static void main(String[] args)    {        int mat[][] = { { 0, 0, 0, 1 },                        { 0, 1, 1, 1 },                        { 1, 1, 1, 1 },                        { 0, 0, 0, 0 } };        System.out.println("Index of row with maximum 1s is "+ rowWithMax1s(mat));    }} // This code is contributed by 'Rishabh Chauhan'.
# Python3 program to find the row# with maximum number of 1s # Function that returns# index of row with maximum# number of 1s.def rowWithMax1s( mat):         # Initialize max values    R = len(mat)    C = len(mat[0])    max_row_index = 0    index=C-1;    # Traverse for each row and    # count number of 1s by finding    # the index of first 1    for i in range(0, R):      flag=False #to check whether a row has more 1's than previous      while(index >=0 and mat[i][index]==1):        flag=True #present row has more 1's than previous        index-=1        if(flag): #if the present row has more 1's than previous          max_row_index = i      if max_row_index==0 and mat[0][C-1]==0:        return 0;    return max_row_index # Driver Codemat = [[0, 0, 0, 1],    [0, 1, 1, 1],    [1, 1, 1, 1],    [0, 0, 0, 0]]print ("Index of row with maximum 1s is",    rowWithMax1s(mat)) # This code is contributed# by Rishabh Chauhan
// C# program to find the row with maximum// number of 1susing System; class GFG{public static int R = 4, C = 4;  // Function that returns index of row// with maximum number of 1s.public static int rowWithMax1s(int[][] mat){    // Initialize max values    int max_row_index = 0;     int i, index;    index=C-1;    for (i = 0; i < R; i++)    {                 if (index >=0 && mat[i][index]==1)        {            index-=1;            max_row_index = i;        }    }    if (max_row_index==0&&mat[0][C-1]==0)        return 0;    return max_row_index;} // Driver Codepublic static void Main(string[] args){    int[][] mat = new int[][]    {        new int[] {0, 0, 0, 1},        new int[] {0, 1, 1, 1},        new int[] {1, 1, 1, 1},        new int[] {0, 0, 0, 0}    };    Console.WriteLine("Index of row with maximum 1s is " +rowWithMax1s(mat));}} // This code is contributed by Rishabh Chauhan
<script>         // JavaScript program for the above approach        let R = 4        let C = 4                 // The main function that returns index of row with maximum        // number of 1s.        function rowWithMax1s(mat)        {                     // Initialize first row as row with max 1s            let j, max_row_index = 0;            j = C - 1;             for (let i = 0; i < R; i++)            {                             // Move left until a 0 is found                let flag = false;                                 // to check whether a row has more 1's than previous                while (j >= 0 && mat[i][j] == 1)                {                                     j = j - 1; // Update the index of leftmost 1                    // seen so far                    flag = true;//present row has more 1's than previous                }                                 // if the present row has more 1's than previous                if (flag)                {                    max_row_index = i; // Update max_row_index                }            }            if (max_row_index == 0 && mat[0][C - 1] == 0)                return -1;            return max_row_index;        }                 // Driver Code        let mat = [[0, 0, 0, 1],        [0, 1, 1, 1],        [1, 1, 1, 1],        [0, 0, 0, 0]];         document.write("Index of row with maximum 1s is " + rowWithMax1s(mat)); // This code is contributed by Potta Lokesh    </script>
Index of row with maximum 1s is 2
  
Index of row with maximum 1s is 2
 
Thanks to Tylor, Ankan , Palash and Rishabh Chauhan for their inputs.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
 
shrikanth13
rathbhupendra
divyeshrabadiya07
divyesh072019
rutvik_56
dharanendralv23
suresh07
kush11
drsmolderrishabhchauhan
sushruth
lokeshpotta20
rakeshsahni
prasanna1995
sanjoy_62
Rajput-Ji
24*7 Innovation Labs
Amazon
Microsoft
Paytm
Arrays
Matrix
Searching
Paytm
Amazon
Microsoft
24*7 Innovation Labs
Arrays
Searching
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Largest Sum Contiguous Subarray
Top 50 Array Coding Problems for Interviews
Linear Search
Maximum and minimum of an array using minimum number of comparisons
Multidimensional Arrays in Java
Matrix Chain Multiplication | DP-8
Program to find largest element in an array
Sudoku | Backtracking-7
Print a given matrix in spiral form
Divide and Conquer | Set 5 (Strassen's Matrix Multiplication)