Todos los desafíos
Fácil 0 resueltos 0% de aceptación

Haz que un Arreglo Sea No Decreciente

Encuentra el menor número de incrementos necesarios para que cada valor sea al menos igual al anterior.

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

Ejemplo 1
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.

Ejemplo 2
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.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.