Una solución en n + m pasos: comienza con A [0] [n – 1] . Lo compruebas con tu número. Si A [0] [n-1] es más alto que su número actual, significa que puede eliminar todos los números en esta fila e ir una fila hacia abajo, si es más bajo, puede eliminar todos los números en esta columna y continuar La columna a la izquierda. Entonces, en cada paso, disminuye el índice de la columna o aumenta el índice de la fila. Solo puedes hacer esto n + m veces.
Por qué no se puede hacer mucho mejor:
Puede encontrar un ejemplo que tenga números ordenados por diagonales para que los números en una diagonal más alta sean más pequeños que los números en una diagonal más baja y para que dentro de cada diagonal el orden sea aleatorio.
Un ejemplo de eso sería:
- Cómo implementar un algoritmo de equilibrio de carga personalizado aparte del algoritmo Round Robin predeterminado en mi Amazon Elastic Load Balancer usando Java SDK para AWS
- ¿Cuál es el significado de 'orden de crecimiento' en el análisis de algoritmos y cómo podemos encontrar el orden de crecimiento de un algoritmo dado?
- ¿Existe un algoritmo para fusionar 2 montones máximos en un montón mínimo con una complejidad de tiempo menor que O (n)?
- ¿Qué recurso contiene el mayor conjunto de algoritmos?
- Cómo escribir una matriz para un libro de calificaciones que acepte 10 entradas y no requiera usarlas todas
1 2 6 10
3 4 7 13
5 9 11 14
8 12 15 16
En estos ejemplos, debe pasar por la mayoría de los elementos en diagonal en el peor de los casos porque una pregunta en la diagonal simplemente elimina a un candidato y una pregunta fuera de la diagonal simplemente ayuda a determinar la diagonal derecha para buscar. Entonces, en el peor de los casos, debe hacer al menos consultas O (min (m, n)).