370. Range Addition

LeetCode medium original: C# #array #csharp #leetcode #medium
O texto da tarefa é traduzido do russo para o idioma selecionado. O código permanece sem alterações.

given inteiro length и array updates, где updates[i] = [startIdxi, endIdxi, inci].

У вас есть array arr длины length, заполненный нулями. Вам нужно применить некоторые операции к arr. В i-й операции следует увеличить все elementы arr[startIdxi], arr[startIdxi + 1], ..., arr[endIdxi] на inci.

return arr после Applications всех обновлений.

Exemplo:

Input: length = 5, updates = [[1,3,2],[2,4,3],[0,2,-2]]

Output: [-2,0,3,5,3]

C# solução

correspondente/original
public int[] GetModifiedArray(int length, int[][] updates) {
    int[] result = new int[length];
    foreach (var update in updates) {
        int start = update[0], end = update[1], val = update[2];
        result[start] += val;
        if (end + 1 < length) {
            result[end + 1] -= val;
        }
    }
    for (int i = 1; i < length; i++) {
        result[i] += result[i - 1];
    }
    return result;
}

C++ solução

rascunho automático, revisar antes de enviar
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
public vector<int>& GetModifiedArray(int length, int[][] updates) {
    vector<int>& result = new int[length];
    foreach (var update in updates) {
        int start = update[0], end = update[1], val = update[2];
        result[start] += val;
        if (end + 1 < length) {
            result[end + 1] -= val;
        }
    }
    for (int i = 1; i < length; i++) {
        result[i] += result[i - 1];
    }
    return result;
}

Java solução

correspondente/original
public int[] getModifiedArray(int length, int[][] updates) {
    int[] result = new int[length];

    for (int[] update : updates) {
        int start = update[0], end = update[1], val = update[2];
        result[start] += val;
        if (end + 1 < length) {
            result[end + 1] -= val;
        }
    }

    for (int i = 1; i < length; i++) {
        result[i] += result[i - 1];
    }

    return result;
}

JavaScript solução

correspondente/original
function getModifiedArray(length, updates) {
    let result = new Array(length).fill(0);

    for (let update of updates) {
        let [start, end, val] = update;
        result[start] += val;
        if (end + 1 < length) {
            result[end + 1] -= val;
        }
    }

    for (let i = 1; i < length; i++) {
        result[i] += result[i - 1];
    }

    return result;
}

Python solução

correspondente/original
def getModifiedArray(length, updates):
    result = [0] * length

    for update in updates:
        start, end, val = update
        result[start] += val
        if end + 1 < length:
            result[end + 1] -= val

    for i in range(1, length):
        result[i] += result[i - 1]

    return result

Go solução

correspondente/original
func getModifiedArray(length int, updates [][]int) []int {
    result := make([]int, length)

    for _, update := range updates {
        start, end, val := update[0], update[1], update[2]
        result[start] += val
        if end+1 < length {
            result[end+1] -= val
        }
    }

    for i := 1; i < length; i++ {
        result[i] += result[i-1]
    }

    return result
}

Algorithm

Для каждого обновления (start, end, val) выполните две операции:

Увеличьте значение в позиции start на val: arr[start] = arr[start] + val.

Уменьшите значение в позиции end + 1 на val: arr[end + 1] = arr[end + 1] - val.

Примените конечное преобразование: вычислите кумулятивную сумму всего arrayа (с индексами, начиная с 0).

return обновленный array arr.

😎

Vacancies for this task

vagas ativas with overlapping task tags are mostradas.

Todas as vagas
Ainda não há vagas ativas.