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

在这里插入图片描述样例:输入
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;
	}
	
	
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值