Este es un problema clásico en los desafíos de programación, ya sea de programación competitiva o problemas de entrevista.
- Práctica: Se enfrenta a este problema durante las entrevistas probablemente porque no practica resolver problemas de programación a menos que se lo pidan durante una entrevista de trabajo. Practique los desafíos de programación regularmente comenzando con problemas muy fáciles: a menudo verá que se equivocó en algún lugar incluso en problemas que pensó que eran pan comido.
- Dónde : algunos sitios web como la preparación de la entrevista de codificación facilitaron no solo evaluar su solución, sino también informarle los casos de prueba en los que su programa falló. Arreglar su código mirando los casos de prueba que acaban de romper su programa es un buen comienzo.
- Casos de prueba: la próxima vez que resuelva un problema de programación, dedique uno o dos minutos a pensar en casos de prueba, diferentes entradas que su programa puede encontrar. Por ejemplo, ¿cuáles serían algunas entradas diferentes para un programa que calcula la raíz cuadrada de un número? cero, los números negativos son un juego justo. Los decimales entre o y 1 son especialmente interesantes porque su raíz cuadrada es más grande que el número mismo
- Piensa en los casos de esquina: piensa en los casos de esquina y arréglalos. Los casos de esquina generalmente incluyen escenarios como
- Matrices de un elemento.
- Números muy grandes que pueden causar desbordamientos.
- Recursión que no termina
- Clases de entrada que su código no maneja, como ceros, números negativos, matriz con duplicados, etc.
- Suposiciones erróneas, como suponer que las dos matrices de entrada tienen la misma longitud (por ejemplo, en un programa que imprime la intersección de dos matrices)
¿Puedes ver el caso de la esquina en este fragmento de código de búsqueda binaria? ?
int binarySearchRecursive (int array [], int start, int end, int k) {
if (inicio <= fin) {
int mid = (inicio + fin) / 2
- ¿Qué debo estudiar para una entrevista técnica SQL?
- Cómo descifrar una entrevista de colocación
- Cómo asegurarse de que me he preparado exhaustivamente para las ubicaciones
- ¿Cuáles son las preguntas más frecuentes en ASP.NET en una entrevista?
- ¿Cuáles son algunas buenas tareas de desarrollo cortas (1–3 horas) para un proceso de solicitud / entrevista de desarrollador JavaScript de nivel medio de entrada?
if (matriz [medio] <k) {
return binarySearchRecursive (array, mid + 1, end, k);
} else if (array [mid] == k) {
volver a mediados;
} más {
return binarySearchRecursive (matriz, inicio, mediados de 1, k);
}
}
volver -1;
}
Como se mencionó anteriormente, números muy grandes que pueden causar desbordamientos
int mid = (inicio + fin) / 2
si start y end son valores grandes cercanos al rango entero máximo, ¡vaya! inicio + fin conducirá a un desbordamiento!
¿Qué hay de esta búsqueda binaria aquí?
int binarySearchRecursive (int array [], int start, int end, int k) {
if (inicio <= fin) {
int mid = start + (end-start) / 2
if (matriz [medio] <k) {
return binarySearchRecursive (array, mid, end, k);
} else if (array [mid] == k) {
volver a mediados;
} más {
return binarySearchRecursive (array, start, mid, k);
}
}
volver -1;
}
Este programa podría terminar en una recursión infinita. Tome una matriz de solo dos elementos:
matriz = {10,20}
inicio = 0, final = 1, k = 5
BinarySearchRecursive (array, 0, 1, 5)
mid es 0
Debido a que array [0]> 5, esto conduce a binarySearchRecursive (array, 0, 1, 5) ……….
…… ..