Anillo recursivo-Joseph

2020-04-10 11:40:30

Descripción del problema:

Los n números 0,1 ,, n-1 están dispuestos en un círculo, comenzando con el número 0 y eliminando el número enésimo de este círculo cada vez. Encuentra el último número que queda en este círculo.

Por ejemplo, los 5 dígitos 0, 1, 2, 3 y 4 forman un círculo, y el tercer dígito se elimina cada vez del dígito 0, luego los primeros 4 dígitos eliminados son 2, 0, 4, 1, y así sucesivamente. El número restante es 3.

Ejemplo 1:

Entrada: n = 5, m = 3 
Salida: 3

Ejemplo 2

Entrada: n = 10, m = 17 
Salida: 2

Restricciones:

  • 1 <= n <= 10^5
  • 1 <= m <= 10^6

Resolución de problemas:

Utilice una solución recursiva para resolver en O (n) la complejidad del tiempo.

Complejidad del tiempo: O (n)

    public int lastRemaining (int n, int m) { 
        if (n == 1) devuelve 0; 
        return (lastRemaining (n - 1, m) + m)% n; 
    }

  

 

Supongo que te gusta

Origin www.cnblogs.com/hyserendipity/p/12672366.html
Recomendado
Clasificación