Esta pregunta surgió de la discusión en los comentarios de this answer.¿Cómo selecciono todos los elementos en una lista que están fuera de servicio?
Primero, digamos que es bastante difícil definir lo que está fuera de servicio. Tomando el ejemplo que dio Pavel Shved, en la lista [1,5,10,2,3,4,5,6,7,8,9,10,11] podemos ver "claramente" que 5 y 10 (índices 1) y 2) están fuera de servicio. Pero un algoritmo ingenuo que simplemente verifique algún tipo de lista ordenada invariante no los señalaría.
comprobación
a[i-1]<=a[i] for all 0<i<=N
produciría el elemento en el índice 3 (que es 2);comprobando
a[j]<=a[i] for all 0<=i<=N and 0<=j<=i
arrojaría todos los elementos en los índices 3 a 12;
Mi pregunta es: ¿se puede pensar en un algoritmo para resolver este problema que produce la "respuesta correcta" (es decir, los índices 1 y 2)? Si es así, ¿bajo qué tiempo y complejidad de memoria se ejecutaría?
+1 por tomar esta pregunta interesante de la pregunta original que apuntó a una pregunta completamente nueva –