На вход дан двумерный массив: arrays: [[Int]]. Необходимо найти наибольшую сумму элементов ряда двумерного массива.
На leetcode задача звучит следующим образом:
You are given an m x n integer grid accounts where accounts[i][j] is the amount of money the
ith
customer has in thejth
bank. Return the wealth that the richest customer has.A customer’s wealth is the amount of money they have in all their bank accounts. The richest customer is the customer that has the maximum wealth.
Пример 1:
Input: accounts = [[1,2,3],[3,2,1]]
Output: 6
Объяснение:
1st customer has wealth = 1 + 2 + 3 = 6
2nd customer has wealth = 3 + 2 + 1 = 6
Both customers are considered the richest with a wealth of 6 each, so return 6.
Пример 2:
Input: accounts = [[1,5],[7,3],[3,5]]
Output: 10
Объяснение:
1st customer has wealth = 6
2nd customer has wealth = 10
3rd customer has wealth = 8
The 2nd customer is the richest with a wealth of 10.
Решение
К сожалению, без двух циклов в данной задаче не обойтись. Задача сводится к тому, что необходимо найти сумму всех элементов в каждом массиве или сумму ряда двумерного массива:
Bank1 | Bank2 | Bank3 | Result | |
Customer1 | 1 | 2 | 3 | 6 |
Customer2 | 7 | 1 | 9 | 17 |
Customer3 | 4 | 5 | 1 | 10 |
class Solution {
func maximumWealth(_ accounts: [[Int]]) -> Int {
var maxWealth = 0
for customer in accounts {
var sum = 0
for bank in customer {
sum += bank
}
maxWealth = max(sum, maxWealth)
}
return maxWealth
}
}
Сложность алгоритма: O(m+n)
Дополнительные материалы
Выразить благодарность или найти уникальный материал вы можете в boosty.
Подписывайтесь на мой Telegram-канал iOS Interview Channel, чтобы не пропустить новый материал.
Почему без двоих for никак? А если так:
func testLeet(_ arr: [[Int]]) -> Int {
var res: Int = 0
for arr1 in arr {
let num = arr1.reduce(0, +)
if num > res { res = num }
}
return res
}
Да, так действительность можно сделать и это прекрасное решение!
Но нужно понимать что из себя представляет функция высокого порядка reduce (по факту это for). Используя reduce в данном примере, мы действительно можем сделать реализацию с одним for. Но сложность при этом не изменится.
Спасибо за еще одно решение данной задачи!