刷题系列之1672. 最富有客户的资产总量

167 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

前言

题目来源

leetcode.cn/problems/ri…

题目介绍

给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i​​​​​​​​​​​​ 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。

客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。

题目分析

从题目来看,已知一个二维数组,求accounts[i][j]的每个值,得出其中的最大值。 例子描述

输入:accounts = [[1,5],[7,3],[3,5]]
输出:10
解释:
第 1 位客户的资产总量 = 62 位客户的资产总量 = 103 位客户的资产总量 = 82 位客户是最富有的,资产总量是 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循环,拿到每个二维数组,在遍历循环二维数组,累加求和。得到的每个值依次比较大小,赋值给最大值变量,最后循环结束就能得到我们所需要的结果。

image.png

image.png

官方答案分析

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() 这个是流式函数,求这个数组的和。

image.png

可以看到内存消耗相对少一些,官方的方式更省内存。

总结

这道题不得不说官方代码真是简短,很大的优化了代码写法,学到了一个小技巧。