Hay un algoritmo que necesita saber para generar la próxima permutación lexicográficamente después de una permutación determinada. Tiene 4 pasos:
- Encuentre el índice más alto
i
tal ques[i] < s[i+1]
. Si no existe dicho índice, la permutación es la última permutación. - Encuentre el índice más alto
j > i
tal ques[j] > s[i]
. Talj
debe existir, ya quei+1
es dicho índice. - Cambie
s[i]
cons[j]
. - Invierta el orden de todos los elementos después del índice
i
hasta el último elemento.
Fuente – Algoritmo para encontrar la próxima mayor permutación de una cadena dada
Aquí está el problema en Hackerrank: resolver más grande es mayor
- ¿Cuál es el algoritmo de tiempo polinómico de peor caso de más rápido crecimiento utilizado en la práctica?
- Si uno se está preparando para una entrevista en Google (y tiene 6 meses en la mano), ¿qué libro lo beneficiará más y por qué? ¿'Introducción a los algoritmos' (CLRS) o 'Algoritmos desbloqueados'?
- ¿Qué es una función recursiva elemental?
- ¿Debo aprender algoritmos y estructuras de datos de cada lenguaje de programación?
- ¿Es posible verificar si un gráfico está conectado o no si sé el grado de cada vértice?
Y mi solución más bien lamentable:
T = int (input ())
para i en rango (T):
s = lista (input ())
bandera = 0
para i en rango (1, len (s)):
si s [i-1]! = s [i]:
bandera = 1
rotura
if flag == 0: print (‘sin respuesta’)
más:
max_i = 999 # elige algún valor alto arbitrario
para i en rango (1, len (s)):
si s [i-1] <s [i]: max_i = i-1
if max_i == 999: print (‘sin respuesta’)
más:
max_j = 0
para j en rango (max_i + 1, len (s)):
si s [j]> s [max_i]: max_j = j
# swap
temp = s [max_i]
s [max_i] = s [max_j]
s [max_j] = temp
s = ”. unirse (s)
print (s [: max_i + 1] + s [(max_i + 1):] [:: – 1])