题目:
给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/richest-customer-wealth
解答
解答一:第一眼就想到的解法,遍历加用一个变量实时维护资产最大值。
class Solution {
public:
int maximumWealth(vector<vector<int>>& accounts) {
int m=accounts.size();
//if(m==1) return accumulate(accounts[0].begin(), accounts[0].end(),0);
int n=accounts[0].size();
int ans=INT_MIN;
for(int i=0;i<m;i++)
{
int sum_i=0;
for(int j=0;j<n;j++){
sum_i+=accounts[i][j];
}
if(sum_i>ans){
ans=sum_i;
}
}
return ans;
}
};
解答二:用STL,主要是起到练习STL的作用。
1、运用C++ accumulate()函数:accumulate( iterator beg, iterator end, value)。主要作用是累加求和和自定义类型数据的处理。前两个参数指定累加的范围,第三个参数为累加的初值。
2、运用C++ max_element(): std::max_element(iterator start, iterator end, [compare comp])。用于从范围中找出最大的元素,它接受一个容器范围[开始,结束],并返回一个指向给定范围内具有最大值的元素的迭代器
解答:来源力扣官方解答,官方的解答简短精炼。用到了c++新特性 auto。
class Solution {
public:
int maximumWealth(vector<vector<int>>& accounts) {
int maxWealth = INT_MIN;
for (auto &account : accounts) {
maxWealth = max(maxWealth, accumulate(account.begin(), account.end(), 0));
}
return maxWealth;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/richest-customer-wealth/solution/zui-fu-you-ke-hu-de-zi-chan-zong-liang-b-8p06/
来源:力扣(LeetCode)
解答:用vector和max_element()
class Solution {
public:
int maximumWealth(vector<vector<int>>& accounts) {
int m=accounts.size();
int n=accounts[0].size();
vector <int> ans(m,0);
for(int i=0;i<m;i++)
{
int temp=0;
for(int j=0;j<n;j++)
{
temp+=accounts[i][j];
}
ans.push_back(temp);
}
return *max_element(ans.begin(),ans.end());
}
};
总结:题虽然是简单题,但是可以练习STL,哈哈。