Cuando tomo desafíos de programación en HackerRank, a menudo no apruebo las pruebas de casos de esquina. ¿Cómo puedo probar mi código para casos de esquina sin ver la entrada de prueba?

Este es un problema clásico en los desafíos de programación, ya sea de programación competitiva o problemas de entrevista.

  1. 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.
  2. 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.
  3. 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
  4. Piensa en los casos de esquina: piensa en los casos de esquina y arréglalos. Los casos de esquina generalmente incluyen escenarios como
    1. Matrices de un elemento.
    2. Números muy grandes que pueden causar desbordamientos.
    3. Recursión que no termina
    4. Clases de entrada que su código no maneja, como ceros, números negativos, matriz con duplicados, etc.
    5. 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

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) ……….
…… ..

Normalmente, los desafíos de Hackerrank no tienen casos extremos muy complicados. La codificación contra la entrada específica que ve en sus pruebas no parece ser una buena manera de resolver estos problemas.

Primero, buscaría cadenas vacías / punteros nulos o cualquier cosa que hiciera innecesaria la ejecución del resto de su código. Después de eso, probablemente solo haya algunas formas que la entrada puede tomar. Tal vez todavía hay algunos casos en los que preocuparse; deberías idearlos tú mismo, como lo haces en el mundo real, donde no hay nadie para darte todas las entradas posibles.

Sin embargo, los desafíos de codificación a menudo garantizan algunas cosas sobre la entrada para facilitarle la vida, y están diseñados para ser problemas que permiten soluciones relativamente limpias. No va a tener un montón de sentencias if que comprueban varios casos extremos. Asegúrese de comprender el problema lo suficientemente bien, para que eso no suceda.

Sin embargo, cuando practique, recomendaría buscar soluciones populares de Leetcode (incluso si su solución es aceptada).

Intenta pensar en esos casos. Suponga que hay una división en mi código y luego veré si las entradas pueden ser tales que el número se está dividiendo entre 0. Debe analizar su código y ver dónde pueden salir las cosas mal.

More Interesting

Teniendo números 1,2, ..., n, ¿cuántos árboles BST podemos tener que sean árboles completos?

¿Qué tan difícil es una entrevista de programación en sillicon valley?

¿Cuáles son algunos acertijos interesantes que se hacen en las entrevistas técnicas de programación informática?

¿Qué son buenas para evaluar las entrevistas con algoritmos de codificación?

¿Cuáles son los mejores ejemplos de implementación completa de estructuras de datos prominentes usando C (no C ++)?

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

Dado un flujo continuo de enteros, ¿podemos encontrar el máximo dado cualquier rango arbitrario (a, b) en el tiempo O (log t)?

¿Para qué sirve el algoritmo: "Dada una gran cantidad de matrices, imprima una lista de cada par de matrices y el tamaño de su intersección"?

¿Qué tipo de libros recomienda leer mientras se prepara para codificar entrevistas?

¿Cómo se escribe una función para determinar el nodo en un árbol a la máxima profundidad, rompiendo los lazos con preferencia a los nodos más a la derecha?

Durante una entrevista, ¿es legal que un entrevistador le pregunte a qué compañías se ha postulado e incluso sobre las preguntas que le han hecho?

¿Cuál sería un buen plan de preparación de 7 días para una entrevista de desarrollador web de nivel de entrada (javascript)?

¿Cuál es la forma más eficiente de encontrar el késimo elemento más pequeño en un montón mínimo?

¿Cuáles son las mejores fuentes para practicar problemas de programación dinámica?

¿Cuál es la diferencia entre el comportamiento indefinido, no especificado y la implementación definida?