Problema
Ver original (inglês)Um movimento aumenta um valor do array em 1. Torne o array não decrescente: cada valor deve ser maior ou igual ao valor imediatamente anterior. Não é permitido diminuir valores nem reordená-los.
Implemente increasing_array(numbers).
Entrada
numbers: Os valores na ordem original.
Saída
Retorne o número mínimo total de incrementos unitários.
Restrições
1 ≤ comprimento ≤ 200.000. Cada valor está entre 1 e 1.000.000.000. Use um resultado com sinal de 64 bits.
Exemplos
Entrada:
numbers = [4, 1, 3]
Saída esperada:
expected = 4
Entrada:
std::vector<long long> numbers = {4, 1, 3};
Saída esperada:
long long expected = 4;
Entrada:
long[] numbers = new long[] {4, 1, 3};
Saída esperada:
long expected = 4;
Explicação
Aumente o 1 para 4 usando três movimentos e o 3 para 4 usando um movimento. O resultado [4, 4, 4] usa quatro movimentos.
Entrada:
numbers = [1, 2, 2, 5]
Saída esperada:
expected = 0
Entrada:
std::vector<long long> numbers = {1, 2, 2, 5};
Saída esperada:
long long expected = 0;
Entrada:
long[] numbers = new long[] {1, 2, 2, 5};
Saída esperada:
long expected = 0;
Explicação
Todos os valores já são pelo menos iguais ao valor anterior; vizinhos iguais são permitidos.
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.