给定一个n*n阶方阵,从给定的矩阵中求出最大值和最小值。
null
例如:
Input : arr[][] = {5, 4, 9, 2, 0, 6, 3, 1, 8};Output : Maximum = 9, Minimum = 0Input : arr[][] = {-5, 3, 2, 4};Output : Maximum = 4, Minimum = -5
天真的方法: 我们使用线性搜索分别求出矩阵的最大值和最小值。需要比较的数量为n 2. 求最小值和n 2. 寻找最大元素。总比较值等于2n 2. .
配对比较(有效方法): 从矩阵中选择两个元素,一个从矩阵的一行开始,另一个从矩阵的同一行结束,比较它们,然后比较较小的元素与矩阵的最小值,较大的元素与矩阵的最大值。我们可以看到,对于两个元素,我们需要3个比较,所以对于遍历整个矩阵,我们需要3/2N 2. 比较。
注: 这是本文方法3的扩展形式 数组的最大值和最小值。
C++
// C++ program for finding maximum and minimum in // a matrix. #include<bits/stdc++.h> using namespace std; #define MAX 100 // Finds maximum and minimum in arr[0..n-1][0..n-1] // using pair wise comparisons void maxMin( int arr[][MAX], int n) { int min = INT_MAX; int max = INT_MIN; // Traverses rows one by one for ( int i = 0; i < n; i++) { for ( int j = 0; j <= n/2; j++) { // Compare elements from beginning // and end of current row if (arr[i][j] > arr[i][n-j-1]) { if (min > arr[i][n-j-1]) min = arr[i][n-j-1]; if (max< arr[i][j]) max = arr[i][j]; } else { if (min > arr[i][j]) min = arr[i][j]; if (max< arr[i][n-j-1]) max = arr[i][n-j-1]; } } } cout << "Maximum = " << max; << ", Minimum = " << min; } /* Driver program to test above function */ int main() { int arr[MAX][MAX] = {5, 9, 11, 25, 0, 14, 21, 6, 4}; maxMin(arr, 3); return 0; } |
JAVA
// Java program for finding maximum // and minimum in a matrix. class GFG { static final int MAX = 100 ; // Finds maximum and minimum // in arr[0..n-1][0..n-1] // using pair wise comparisons static void maxMin( int arr[][], int n) { int min = + 2147483647 ; int max = - 2147483648 ; // Traverses rows one by one for ( int i = 0 ; i < n; i++) { for ( int j = 0 ; j <= n/ 2 ; j++) { // Compare elements from beginning // and end of current row if (arr[i][j] > arr[i][n - j - 1 ]) { if (min > arr[i][n - j - 1 ]) min = arr[i][n - j - 1 ]; if (max< arr[i][j]) max = arr[i][j]; } else { if (min > arr[i][j]) min = arr[i][j]; if (max< arr[i][n - j - 1 ]) max = arr[i][n - j - 1 ]; } } } System.out.print( "Maximum = " +max+ ", Minimum = " +min); } // Driver program public static void main (String[] args) { int arr[][] = {{ 5 , 9 , 11 }, { 25 , 0 , 14 }, { 21 , 6 , 4 }}; maxMin(arr, 3 ); } } // This code is contributed by Anant Agarwal. |
Python3
# Python3 program for finding # MAXimum and MINimum in a matrix. MAX = 100 # Finds MAXimum and MINimum in arr[0..n-1][0..n-1] # using pair wise comparisons def MAXMIN(arr, n): MIN = 10 * * 9 MAX = - 10 * * 9 # Traverses rows one by one for i in range (n): for j in range (n / / 2 + 1 ): # Compare elements from beginning # and end of current row if (arr[i][j] > arr[i][n - j - 1 ]): if ( MIN > arr[i][n - j - 1 ]): MIN = arr[i][n - j - 1 ] if ( MAX < arr[i][j]): MAX = arr[i][j] else : if ( MIN > arr[i][j]): MIN = arr[i][j] if ( MAX < arr[i][n - j - 1 ]): MAX = arr[i][n - j - 1 ] print ( "MAXimum =" , MAX , ", MINimum =" , MIN ) # Driver Code arr = [[ 5 , 9 , 11 ], [ 25 , 0 , 14 ], [ 21 , 6 , 4 ]] MAXMIN(arr, 3 ) # This code is contributed by Mohit Kumar |
C#
// C# program for finding maximum // and minimum in a matrix. using System; public class GFG { // Finds maximum and minimum // in arr[0..n-1][0..n-1] // using pair wise comparisons static void maxMin( int [,] arr, int n) { int min = +2147483647; int max = -2147483648; // Traverses rows one by one for ( int i = 0; i < n; i++) { for ( int j = 0; j <= n/2; j++) { // Compare elements from beginning // and end of current row if (arr[i,j] > arr[i,n - j - 1]) { if (min > arr[i,n - j - 1]) min = arr[i,n - j - 1]; if (max < arr[i,j]) max = arr[i,j]; } else { if (min > arr[i,j]) min = arr[i,j]; if (max < arr[i,n - j - 1]) max = arr[i,n - j - 1]; } } } Console.Write( "Maximum = " + max + ", Minimum = " + min); } // Driver code static public void Main () { int [,] arr = { {5, 9, 11}, {25, 0, 14}, {21, 6, 4} }; maxMin(arr, 3); } } // This code is contributed by Shrikant13. |
PHP
<?php // PHP program for finding // maximum and minimum in // a matrix. $MAX = 100; // Finds maximum and minimum // in arr[0..n-1][0..n-1] // using pair wise comparisons function maxMin( $arr , $n ) { $min = PHP_INT_MAX; $max = PHP_INT_MIN; // Traverses rows one by one for ( $i = 0; $i < $n ; $i ++) { for ( $j = 0; $j <= $n / 2; $j ++) { // Compare elements from beginning // and end of current row if ( $arr [ $i ][ $j ] > $arr [ $i ][ $n - $j - 1]) { if ( $min > $arr [ $i ][ $n - $j - 1]) $min = $arr [ $i ][ $n - $j - 1]; if ( $max < $arr [ $i ][ $j ]) $max = $arr [ $i ][ $j ]; } else { if ( $min > $arr [ $i ][ $j ]) $min = $arr [ $i ][ $j ]; if ( $max < $arr [ $i ][ $n - $j - 1]) $max = $arr [ $i ][ $n - $j - 1]; } } } echo "Maximum = " , $max , ", Minimum = " , $min ; } // Driver Code $arr = array ( array (5, 9, 11), array (25, 0, 14), array (21, 6, 4)); maxMin( $arr , 3); // This code is contributed by anuj_67. ?> |
Javascript
<script> // Javascript program for finding maximum // and minimum in a matrix. let MAX = 100; // Finds maximum and minimum // in arr[0..n-1][0..n-1] // using pair wise comparisons function maxMin(arr,n) { let min = +2147483647; let max = -2147483648; // Traverses rows one by one for (let i = 0; i < n; i++) { for (let j = 0; j <= n / 2; j++) { // Compare elements from beginning // and end of current row if (arr[i][j] > arr[i][n - j - 1]) { if (min > arr[i][n - j - 1]) min = arr[i][n - j - 1]; if (max< arr[i][j]) max = arr[i][j]; } else { if (min > arr[i][j]) min = arr[i][j]; if (max < arr[i][n - j - 1]) max = arr[i][n - j - 1]; } } } document.write( "Maximum = " + max + ", Minimum = " + min); } // Driver Code let arr = [ [ 5, 9, 11 ], [ 25, 0, 14 ], [ 21, 6, 4 ] ]; maxMin(arr, 3); // This code is contributed by sravan kumar </script> |
输出:
Maximum = 25, Minimum = 0
本文由 希瓦姆·普拉丹(anuj_charm) .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END