查找二维数组 每行最大的数 每列最大的数

【查找二维数组 每行最大的数 每列最大的数】查找二维数组 每行最大的数 每列最大的数
文章图片
样例:输入
2 2
2 1
1 1
输出
20
思路:
因为未被遮挡的面子是该立方体的最小面积,
将这些立方体堆叠看作一个二维数组。
其实就是查找从前往后看每列最大值相加,从左往右看每行最大值相加,从上往下看占了多少位置。
表面积 = (每列最大值的和 + 每行最大值的和 + 二维数组一共多少位置)*2
1.返回一个二维数组每行最大的值
一个 n行 m列的二维数组ar.

public static int[] rowMax(int[][] ar,int n, int m){// 接收每行中最大的数 int[] rowmax = new int[n]; for(int i = 0; i < n; i++){ rowmax[i] = ar[i][0]; for(int j = 0; j < m; j++){ if(ar[i][j] > rowmax[i]){ rowmax[i] = ar[i][j]; } } } return rowmax; }

2.返回一个二维数组每列最大的值
public static int[] linMax(int[][] ar,int n, int m){// 接收每列中最大的数 int[] linmax = new int[m]; for(int j = 0; j < m; j++){ linmax[j] = ar[0][j]; for(int i = 0; i < n; i++){ if(ar[i][j] > linmax[j]){ linmax[j] = ar[i][j]; } } } return linmax; }

3.输出表面积
import java.util.Scanner; public class area{ public static void main(String args[]){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int[][] arr = new int[n][m]; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ arr[i][j] = sc.nextInt(); } }int[] r =new int[n]; int[] l =new int[m]; r = rowMax(arr,n,m); // 接收每行中最大的数 l = linMax(arr,n,m); //接收每列最大的数 int q = n*m; //接收上表面的面积int biao =(arrSum(r)+arrSum(l)+q)*2; System.out.println(biao); } public static int arrSum(int [] m){ int sum = 0; for(int i = 0; i < m.length; i++){ sum += m[i]; } return sum; }

    推荐阅读