Максимальная сумма элементов ряда двумерного массива

На вход дан двумерный массив: arrays: [[Int]]. Необходимо найти наибольшую сумму элементов ряда двумерного массива.

На leetcode задача звучит следующим образом:

You are given an m x n integer grid accounts where accounts[i][j] is the amount of money the i​​​​​​​​​​​th​​​​customer has in the j​​​​​​​​​​​th​​​​ 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.

Решение

К сожалению, без двух циклов в данной задаче не обойтись. Задача сводится к тому, что необходимо найти сумму всех элементов в каждом массиве или сумму ряда двумерного массива:

Bank1Bank2Bank3Result
Customer11236
Customer271917
Customer345110
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)

Дополнительные материалы

  1. Как подготовиться к алгоритмической секции
  2. Сумма элементов в массиве по текущему индексу

Выразить благодарность или найти уникальный материал вы можете в boosty.

Подписывайтесь на мой Telegram-канал iOS Interview Channel, чтобы не пропустить новый материал.


2 thoughts on “Максимальная сумма элементов ряда двумерного массива”

  1. Почему без двоих 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
    }

    1. Да, так действительность можно сделать и это прекрасное решение!
      Но нужно понимать что из себя представляет функция высокого порядка reduce (по факту это for). Используя reduce в данном примере, мы действительно можем сделать реализацию с одним for. Но сложность при этом не изменится.

      Спасибо за еще одно решение данной задачи!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *