文章目录
- 1. 每日一言
- 2. 题目
- 3. 解题思路
- 3.1 法一
- 3.2 法二
- 4. 代码
- 4.1 法一
- 4.2 法二
- 5. 结语
1. 每日一言
Care and diligence bring luck.
谨慎和勤奋,带来好运气。
2. 题目
题目链接:最富有客户的资产总量
给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。
客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。
-
示例 1:
输入:accounts = [[1,2,3],[3,2,1]]
输出:6
解释:
第 1 位客户的资产总量 = 1 + 2 + 3 = 6
第 2 位客户的资产总量 = 3 + 2 + 1 = 6
两位客户都是最富有的,资产总量都是 6 ,所以返回 6 。 -
示例 2:
输入:accounts = [[1,5],[7,3],[3,5]]
输出:10
解释:
第 1 位客户的资产总量 = 6
第 2 位客户的资产总量 = 10
第 3 位客户的资产总量 = 8
第 2 位客户是最富有的,资产总量是 10 -
示例 3:
输入:accounts = [[2,8,7],[7,1,3],[1,9,5]]
输出:17
提示:
m == accounts.length
n == accounts[i].length
1 <= m, n <= 50
1 <= accounts[i][j] <= 100
3. 解题思路
3.1 法一
- 使用 malloc 为一个大小为 accountsSize 的整型数组 arr 分配了内存空间,并使用 memset 将数组初始化为 0。用于保存每个一维数组的和。
- 使用两重循环遍历二维数组。外层循环遍历每个一维数组,内层循环遍历当前一维数组的每个元素,将每个一维数组的元素值累加到 arr[i] 中。
- 遍历一维数组求和得到的结果数组 arr,找到其中的最大值,并将最大值保存到变量 max 中。
- 函数最后返回找到的最大值 max。
3.2 法二
- 对于每个一维数组(代表一个人的财富情况),遍历其所有元素并对其进行累加,得到每个人的总财富 max1。
- 在内层循环中,将每个人的总财富与当前已经找到的最大财富 max 进行比较,如果大于 max,则更新 max 为当前人的总财富 max1。
- 函数返回值为 max,它代表了所有人中的最大财富。
4. 代码
4.1 法一
int maximumWealth(int** accounts, int accountsSize, int* accountsColSize) {
//动态申请一个数组arr,用来存放每一行的和
int *arr = (int*)malloc(sizeof(int)*accountsSize);
//将arr数组初始化
memset(arr,0,accountsSize*sizeof(int));
//将每一行的和存放到arr中
for(int i = 0; i < accountsSize; i++) {
for(int j = 0;j < *accountsColSize; j++) {
arr[i] += accounts[i][j];
}
}
//max用来存放最富有的人的钱数
int max = arr[0];
//寻找谁最富有,将钱数给到max
for(int i = 1; i < accountsSize; i++) {
if(max < arr[i]) {
max = arr[i];
}
}
//返回max
return max;
}
4.2 法二
int maximumWealth(int** accounts, int accountsSize, int* accountsColSize) {
//max用来存放最富有的人的钱数
int max = accounts[0][0];
for(int i = 0; i < accountsSize; i++) {
int max1 = 0;//max1用来存放当前这个人的总钱数
for(int j = 0;j < *accountsColSize; j++) {
max1 += accounts[i][j];
if(max < max1) {
max = max1;
}
}
}
return max;
}
5. 结语
请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!
都看到这里啦!真棒(*^▽^*)
可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家
编程小白写作,如有纰漏或错误,欢迎指正