Volver a los desafíos
Intermedio 0 resueltos 0% de aceptación

Suma de Moneda Más Pequeña Imposible

Encuentra la primera cantidad positiva que no se puede formar con las monedas disponibles.

Lo que aprenderás

  • Ordenar las monedas y seguir las sumas alcanzables
  • Encontrar el primer importe imposible de pagar
  • Demostrar por qué funciona la regla voraz

Problema

Ver original (inglés)

Puedes seleccionar cualquier subconjunto de las monedas proporcionadas. Cada moneda individual puede usarse como máximo una vez, incluso si hay varias monedas con el mismo valor. Encuentra el menor entero positivo que no pueda obtenerse con ninguna selección.

Implementa missing_coin_sum(coins).

Entrada

coins: Los valores de las monedas disponibles; los duplicados representan monedas distintas.

Salida

Devuelve la menor cantidad positiva imposible de obtener.

Restricciones

1 ≤ número de monedas ≤ 200,000. Cada valor está entre 1 y 1,000,000,000.

Ejemplos

Ejemplo 1
Entrada:
coins = [1, 1, 4]

Salida esperada:
expected = 3
Entrada:
std::vector<long long> coins = {1, 1, 4};

Salida esperada:
long long expected = 3;
Entrada:
long[] coins = new long[] {1, 1, 4};

Salida esperada:
long expected = 3;

Explicación

Las cantidades 1 y 2 se pueden formar usando las monedas de valor uno. No existe ningún subconjunto disponible que sume 3.

Ejemplo 2
Entrada:
coins = [2, 3]

Salida esperada:
expected = 1
Entrada:
std::vector<long long> coins = {2, 3};

Salida esperada:
long long expected = 1;
Entrada:
long[] coins = new long[] {2, 3};

Salida esperada:
long expected = 1;

Explicación

No hay forma de obtener 1 porque todas las monedas valen al menos 2.

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Ordena las monedas y construye la menor suma alcanzable de menor a mayor.

Pista 2

Si la siguiente moneda es mayor que la primera suma no alcanzable, esa suma ya nunca podrá formarse.

Pista 3

Los duplicados solo ayudan si amplían el rango alcanzable actual sin huecos.

Complejidad esperada

O(n log n) time, O(1) extra space, excluding sorting implementation details

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.