Сложность: medium
Дано целое число length и массив updates, где updates[i] = [startIdxi, endIdxi, inci].
У вас есть массив arr длины length, заполненный нулями. Вам нужно применить некоторые операции к arr. В i-й операции следует увеличить все элементы arr[startIdxi], arr[startIdxi + 1], ..., arr[endIdxi] на inci.
Верните arr после применения всех обновлений.
Пример:
Input: length = 5, updates = [[1,3,2],[2,4,3],[0,2,-2]]
Output: [-2,0,3,5,3]
👨💻 Алгоритм:
1⃣Для каждого обновления (start, end, val) выполните две операции:
Увеличьте значение в позиции start на val: arr[start] = arr[start] + val.
Уменьшите значение в позиции end + 1 на val: arr[end + 1] = arr[end + 1] - val.
2⃣Примените конечное преобразование: вычислите кумулятивную сумму всего массива (с индексами, начиная с 0).
3⃣Верните обновленный массив arr.
😎 Решение:
func getModifiedArray(_ length: Int, _ updates: [[Int]]) -> [Int] {
var result = [Int](repeating: 0, count: length)
for update in updates {
let start = update[0], end = update[1], val = update[2]
result[start] += val
if end + 1 < length {
result[end + 1] -= val
}
}
for i in 1..<length {
result[i] += result[i - 1]
}
return result
}Ставь 👍 и забирай 📚 Базу знаний
