Skip to main content

Trying to get the max/min in array



Im trying to get the min value in a column in the row of the max value. Im trying to using for loops but its not working.





Let say a matrix A:





3 4 5


2 3 4


1 2 3





I want the program to find the max value in the [0]th row then find the min value in the colunm of the max. So result should be : max of row [0] = 5, min of column [2] = 3. I then want it to do the same of all the rows, that why I ysed a while loop.





Here is the matrix:







public int[][] createMatrix(int a, int b){

Scanner inputm = new Scanner(System.in);

A = new int[a][b];

System.out.println("Enter elements for matrix A : ");

for (int i=0 ; i < A.length ; i++){

System.out.println("Enter numbers for " + i +"th row");

for (int j=0 ; j < A[i].length ; j++){

A[i][j] = inputm.nextInt();



}



}

return A;

}



public int[][] displayMatrix(){

System.out.println("Matrix A: ");



for (int i=0 ; i < A.length ; i++)

{ System.out.println();

for (int j=0 ; j < A[i].length ; j++){

System.out.print(A[i][j]+" ");

}

}





return A;



}





public int getMaximumOfEveryRow (int c){

a=c;

int i= 0;

int j;

while(i < A[a].length){



max = Integer.MIN_VALUE;

for ( j = 0; j < A [ i ].length; j++ )

if ( A [ i ] [ j ] > max ){

max = A [ i ] [ j ];

}







for ( i = 0; i < A [ i ].length; i++ )// e

if ( A [ i ] [ j ] < min ){

min = A [ i ] [ j ];

}



System.out.println( "\n Maximum of row " + j + " = " + max );

System.out.println( "Minimum of column " + i + " = " + min );

if(max == min){

System.out.println( min+ " = " + max );

System.out.println( "This is a saddle point. ");

}









i++;



}

return max;





}







and this is what I have so far:







public int getMaximumOfEveryRow (int c){

a=c;

int i= 0;

int j;

while(i < A[a].length){



max = Integer.MIN_VALUE;

for ( j = 0; j < A [ i ].length; j++ )

if ( A [ i ] [ j ] > max ){

max = A [ i ] [ j ];

}





int e = j;

int r;

for ( i = 0; i < A [ i ].length; i++ )// e

if ( A [ i ] [ j ] < min ){

min = A [ i ] [ j ];

}



System.out.println( "\n Maximum of row " + j + " = " + max );

System.out.println( "Minimum of column " + i + " = " + min );

if(max == min){

System.out.println( min+ " = " + max );

System.out.println( "This is a saddle point. ");

}









i++;



}

return max;





}

public int getMaximumOfEveryColumn ()

{

for ( int i = 0; i < A.length; i++ )

{

maxc = Integer.MIN_VALUE;

for ( int j = 0; j < A [ i ].length; j++ )

if ( A [ j ] [ i ] > maxc )

maxc = A [ j ] [ i ];

System.out.println( "Maximum of column " + i + " = " + maxc );

}

return maxc;

}



public int getMinimumOfEveryColumn_(){

for ( int i = 0; i < A.length; i++ )

{

minc = Integer.MAX_VALUE;

for ( int j = 0; j < A [ i ].length; j++ )

if ( A [ j ] [ i ] < minc )

minc = A [ j ] [ i ];

System.out.println( "Minimum of column " + i + " = " + minc );

}

return minc;

}

public int getMaximumOfEveryRow ()

{

for ( int i = 0; i < A.length; i++ )

{

maxr = Integer.MIN_VALUE;

for ( int j = 0; j < A [ i ].length; j++ )

if ( A [ i ] [ j ] > maxr )

maxr = A [ i ] [ j ];

System.out.println( "Maximum of row " + i + " = " + maxr );

}

return maxr;

}




Comments

  1. This is the simplest implementation.

    for(int i=0; i<arr.length ; i++){
    int columnNumber = getMaxElementsColumnNumber(arr,i); // i will represent row number
    int minElement = getMinimumElementInColumn(arr,columnNumber);
    }


    getMaxElementsColumnNumber() will print the maximum number in current row and will return the column number of that element

    getMinimumElementInColumn() will traverse column of matrix and return the minimum element in that column.

    You can implement code in the same for loop. In this way you can also check for the saddle point.

    ReplyDelete
  2. Here is the solution:

    public void get_minimum_of_the_column_of_local_maximum ()
    {
    for ( int i = 0; i < A.length; i++ )
    {
    min = Integer.MAX_VALUE;
    max = Integer.MIN_VALUE;
    int index_of_maximum_in_its_row = 0;

    for ( int j = 0; j < A [ i ].length; j++ )
    if ( A [ i ] [ j ] > max )
    {
    max = A [ i ] [ j ];
    index_of_maximum_in_its_row = j;
    }

    for ( int j = 0; j < A [ index_of_maximum_in_its_row ].length; j++ )
    if ( A [ j ] [ index_of_maximum_in_its_row ] < min )
    min = A [ j ] [ index_of_maximum_in_its_row ];

    System.out.print( " Maximum of row [" + i + "] = " + max);
    System.out.println( " Minimum of column [" + index_of_maximum_in_its_row + "] = " + min );
    }
    }


    What does this code snippet do?

    You have min = Integer.MAX_VALUE, max = Integer.MIN_VALUE variables. The reason we assign these values to this numbers is to make finding max/min possible. How? Initially min has the greatest integer value but as far as we find a value less than it we update our minimum so the min's value decreases. Same technique with max variable but of course it goes the other direction by increasing in value after comparisons.

    First inner for loop determines the maximum of row i, then marks the index of maximum in that row by using variable index_of_maximum_in_its_row. It is required to be used later on in the second inner loop.

    Second inner loop determines the minimum of column number index_of_maximum_in_its_row with one iteration over that column. Than the method prints the results.

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...