← Назад к вопросам
Максимальная сумма в массиве
1.0 Junior🔥 141 комментариев
#Коллекции и структуры данных#Язык Swift
Условие
Дан двумерный массив целых чисел размера M x N. Найдите строку с максимальной суммой элементов и верните эту сумму.
Примеры:
Пример 1:
Вход: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Выход: 24
Объяснение: Строка [7, 8, 9] имеет максимальную сумму 7+8+9=24
Пример 2:
Вход: [[10, -5, 3], [1, 2, 3], [-1, -2, -3]]
Выход: 8
Объяснение: Строка [10, -5, 3] имеет максимальную сумму 10-5+3=8
Требования:
- Временная сложность: O(M * N)
- Пространственная сложность: O(1) (не считая входного массива)
Бонус: Решите задачу с использованием функций высшего порядка Swift (map, reduce).
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение
Основное решение O(M*N) время, O(1) память
func maxRowSum(_ matrix: [[Int]]) -> Int {
guard !matrix.isEmpty else { return 0 }
var maxSum = Int.min
for row in matrix {
let rowSum = row.reduce(0, +)
maxSum = max(maxSum, rowSum)
}
return maxSum
}
Как это работает:
- Проходим по каждой строке матрицы - O(M)
- Для каждой строки вычисляем сумму элементов - O(N)
- Отслеживаем максимальную сумму
- Общая сложность: O(M*N)
Решение с использованием map и reduce
func maxRowSumFunctional(_ matrix: [[Int]]) -> Int {
return matrix
.map { $0.reduce(0, +) } // Преобразуем каждую строку в её сумму
.max() ?? Int.min // Находим максимум
}
Поток выполнения:
map { $0.reduce(0, +) }- преобразует каждый массив в сумму его элементов.max()- находит максимальное значение?? Int.min- обработка пустого массива
Решение с явным циклом (более явное)
func maxRowSumExplicit(_ matrix: [[Int]]) -> Int {
var maxSum = Int.min
for row in matrix {
var rowSum = 0
for element in row {
rowSum += element
}
maxSum = max(maxSum, rowSum)
}
return maxSum
}
Тестирование
let test1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(maxRowSum(test1)) // 24
print(maxRowSumFunctional(test1)) // 24
let test2 = [[10, -5, 3], [1, 2, 3], [-1, -2, -3]]
print(maxRowSum(test2)) // 8
print(maxRowSumFunctional(test2)) // 8
// Граничные случаи
let test3: [[Int]] = [] // Пустая матрица
print(maxRowSum(test3)) // Int.min
let test4 = [[-1, -2, -3]] // Все отрицательные
print(maxRowSum(test4)) // -6
let test5 = [[100]] // Одно число
print(maxRowSum(test5)) // 100
Анализ
Временная сложность: O(M*N)
- M итераций по строкам
- N итераций по элементам в каждой строке
- Каждый элемент посещается ровно один раз
Пространственная сложность: O(1)
- Используем только переменные maxSum и rowSum
- Не создаём дополнительные структуры данных
Рекомендация
Для интервью используйте функциональный подход - это показывает знание Swift и функционального программирования:
func maxRowSum(_ matrix: [[Int]]) -> Int {
return matrix.map { $0.reduce(0, +) }.max() ?? Int.min
}