Problema
Ver original (inglés)En cada movimiento puedes aumentar en 1 el valor de un elemento del arreglo. Haz que el arreglo sea no decreciente: cada valor debe ser mayor o igual al que está inmediatamente antes. No puedes disminuir valores ni reordenarlos.
Implementa increasing_array(numbers).
Entrada
numbers: Los valores en su orden original.
Salida
Devuelve el número mínimo total de incrementos unitarios.
Restricciones
1 ≤ longitud ≤ 200,000. Cada valor está entre 1 y 1,000,000,000. Usa un resultado con signo de 64 bits.
Ejemplos
Entrada:
numbers = [4, 1, 3]
Salida esperada:
expected = 4
Entrada:
std::vector<long long> numbers = {4, 1, 3};
Salida esperada:
long long expected = 4;
Entrada:
long[] numbers = new long[] {4, 1, 3};
Salida esperada:
long expected = 4;
Explicación
Sube el 1 a 4 usando tres movimientos y el 3 a 4 usando un movimiento. El resultado [4, 4, 4] usa cuatro movimientos.
Entrada:
numbers = [1, 2, 2, 5]
Salida esperada:
expected = 0
Entrada:
std::vector<long long> numbers = {1, 2, 2, 5};
Salida esperada:
long long expected = 0;
Entrada:
long[] numbers = new long[] {1, 2, 2, 5};
Salida esperada:
long expected = 0;
Explicación
Cada valor ya es al menos igual al valor anterior; se permiten valores vecinos iguales.
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.