Se le da una matriz ordenada, que aumenta monotónicamente y disminuye de la misma manera. ¿Cómo idear un algoritmo para encontrar el índice de un elemento en esta matriz sin calcular el pivote? El tiempo de ejecución debe ser O (log n). Puede suponer que no hay ningún elemento duplicado en esta matriz.

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.

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.

More Interesting

¿Cuáles son algunos ejemplos de una entrevista semi-técnica para un programador?

¿Cuáles son algunas buenas preguntas para la entrevista sobre Linux IPC?

¿Por qué algunos desarrolladores pueden construir un buen software, pero no logran descifrar la entrevista técnica?

¿Cuál es la mejor manera de prepararse para los algoritmos de estructura de datos para una entrevista en Amazon?

Cómo prepararme para una entrevista para un puesto de diseñador de juegos

Una pregunta de entrevista CS: ¿Cómo escribo una cola de mensajes desde cero?

Se le proporciona una matriz A de k valores que contienen valores int en orden ordenado (asec). Encuentre los valores de k superiores (asec) que pueden ser el número de la matriz A, o la suma de dos números de A o la suma de tres números de A.?

¿De dónde obtienen la mayoría de los entrevistadores sus preguntas de entrevistas técnicas de informática?

¿Cuál es la complejidad temporal de este código?

¿La revisión del código se aprendió en la universidad con roles (moderador, lector, inspector, etc.) realmente utilizados en Google, Microsoft y Amazon?

¿Me harán preguntas específicas de C ++ si lo he incluido en mi currículum pero la descripción del trabajo dice que debería tener experiencia con Python, Java o C ++?

¿Cuál es la mejor manera de prepararse para la entrevista de Google en 3 meses?

¿Qué preparativos son necesarios para una entrevista técnica como diseñador de experiencia de usuario en una empresa de consultoría?

¿Qué se siente al fallar una entrevista de programación?

Cómo prepararse para la entrevista de estructura de datos y crack