数组
矩阵
题目描述
给你一个 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
解法
方法一:求和
我们遍历 accounts
,求出每一行的和的最大值即可。
时间复杂度 $O(m \times n)$,其中 $m$ 和 $n$ 分别为网格的行数和列数。空间复杂度 $O(1)$。
Python3 Java C++ Go TypeScript Rust PHP C Kotlin
class Solution :
def maximumWealth ( self , accounts : List [ List [ int ]]) -> int :
return max ( sum ( v ) for v in accounts )
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class Solution {
public int maximumWealth ( int [][] accounts ) {
int ans = 0 ;
for ( var e : accounts ) {
// int s = Arrays.stream(e).sum();
int s = 0 ;
for ( int v : e ) {
s += v ;
}
ans = Math . max ( ans , s );
}
return ans ;
}
}
class Solution {
public :
int maximumWealth ( vector < vector < int >>& accounts ) {
int ans = 0 ;
for ( auto & v : accounts ) {
ans = max ( ans , accumulate ( v . begin (), v . end (), 0 ));
}
return ans ;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13 func maximumWealth ( accounts [][] int ) int {
ans := 0
for _ , e := range accounts {
s := 0
for _ , v := range e {
s += v
}
if ans < s {
ans = s
}
}
return ans
}
function maximumWealth ( accounts : number [][]) : number {
return accounts . reduce (
( r , v ) =>
Math . max (
r ,
v . reduce (( r , v ) => r + v ),
),
0 ,
);
}
impl Solution {
pub fn maximum_wealth ( accounts : Vec < Vec < i32 >> ) -> i32 {
accounts . iter (). map ( | v | v . iter (). sum ()). max (). unwrap ()
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class Solution {
/**
* @param Integer[][] $accounts
* @return Integer
*/
function maximumWealth($accounts) {
$rs = 0;
for ($i = 0; $i < count($accounts); $i++) {
$sum = 0;
for ($j = 0; $j < count($accounts[$i]); $j++) {
$sum += $accounts[$i][$j];
}
if ($sum > $rs) {
$rs = $sum;
}
}
return $rs;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13 #define max(a, b) (((a) > (b)) ? (a) : (b))
int maximumWealth ( int ** accounts , int accountsSize , int * accountsColSize ) {
int ans = INT_MIN ;
for ( int i = 0 ; i < accountsSize ; i ++ ) {
int sum = 0 ;
for ( int j = 0 ; j < accountsColSize [ i ]; j ++ ) {
sum += accounts [ i ][ j ];
}
ans = max ( ans , sum );
}
return ans ;
}
1
2
3
4
5
6
7
8
9
10
11
12 class Solution {
fun maximumWealth ( accounts : Array < IntArray > ): Int {
var max = 0
for ( account in accounts ) {
val sum = account . sum ()
if ( sum > max ) {
max = sum
}
}
return max
}
}