Si podemos encontrar el máximo (30 en el ejemplo), podemos hacer dos búsquedas binarias para encontrar la clave.
Para encontrar el máximo, busque en binario el primer número que sea más grande que el que le sigue. Todos los números para los que esto es cierto vienen * después * de todos los números para los que es falso, por lo que se aplica directamente una búsqueda binaria.
Asegúrese de tener en cuenta los casos extremos donde los números están aumentando o disminuyendo por completo.
- Como estudiante de tercer año de CS, ¿cómo me preparo para una pasantía en Microsoft?
- ¿Deberíamos dejar de dar problemas de algoritmo de estilo de pizarra en las entrevistas de programador? ¿Por qué o por qué no?
- Cómo prepararme para limpiar la entrevista para Amazon India como WDE (Ingeniero de desarrollo web)
- Mañana tengo una entrevista técnica en software acuvate para el rol de ingeniero de software. Alguien puede ayudarme?
- ¿Cuál es la forma más rápida de encontrar todos los posibles pares primos en una matriz determinada?
Editar: no vi toda la pregunta, que dice no encontrar el máximo.
En ese caso, divida la matriz por la mitad. La mitad será monótona, y la otra aumentará y disminuirá como la matriz original. Compara los números en el límite para descubrir cuál es cuál. Si la matriz monotónica podría contener la clave (en función de sus puntos finales), búsquela. Si el otro podría contener la clave (es decir, la clave no es menor que ambos puntos finales), entonces vuelva a aparecer en ella.
Para ver que esto es O (lg N), tenga en cuenta que solo haremos dos búsquedas binarias y repetiremos O (lg N) veces.