持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
前言
题目来源
题目介绍
给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。
客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。
题目分析
从题目来看,已知一个二维数组,求accounts[i][j]的每个值,得出其中的最大值。 例子描述
输入:accounts = [[1,5],[7,3],[3,5]]
输出:10
解释:
第 1 位客户的资产总量 = 6
第 2 位客户的资产总量 = 10
第 3 位客户的资产总量 = 8
第 2 位客户是最富有的,资产总量是 10
解题验证
class Solution {
public int maximumWealth(int[][] accounts) {
int m= accounts.length;
//定一个存储每个和的数组,长度跟一维数组长度一样
int[] tempTotal=new int[m];
//定义一个最大值,默认取第1个元素
int maxNum=tempTotal[0];
//遍历一维数组
for(int i=0;i<m;i++){
int n=accounts[i].length;
//用来求和的值
int temp=0;
//遍历二维数组
for(int j=0;j<n;j++){
//累加求和
temp+=accounts[i][j];
}
tempTotal[i]=temp;
//判断每个元素的大小,赋值给最大值变量
if(maxNum<=tempTotal[i]){
maxNum = tempTotal[i];
}
}
return maxNum;
}
}
我们要计算的是二维数组的元素累加的值。所以先拿到一维数组的长度,进行for循环,拿到每个二维数组,在遍历循环二维数组,累加求和。得到的每个值依次比较大小,赋值给最大值变量,最后循环结束就能得到我们所需要的结果。
官方答案分析
class Solution {
public int maximumWealth(int[][] accounts) {
int maxWealth = Integer.MIN_VALUE;
for (int[] account : accounts) {
maxWealth = Math.max(maxWealth, Arrays.stream(account).sum());
}
return maxWealth;
}
}
官方用了一些函数,简化了代码,Math.max 和 Arrays.stream(account).sum() 简化了很多的代码,也达到了同样的效果。 Math.max 是求2个值的最大值。
Arrays.stream(account).sum() 这个是流式函数,求这个数组的和。
可以看到内存消耗相对少一些,官方的方式更省内存。
总结
这道题不得不说官方代码真是简短,很大的优化了代码写法,学到了一个小技巧。