Formas de eliminar TLE

Al resolver problemas en cualquier juez en línea, a veces se puede exceder el límite de tiempo . A continuación se muestran algunas de las formas de optimizar el código:

     for(i = 0 ; i < n ; i++)
     {
           for(j = 0 ; j < n ; j++)
           {
                // Your Code
           }
      }

El código anterior realizará N*N iteraciones y llevará más tiempo, para evitar esto, la idea es pensar en un enfoque que minimice el uso de bucles dentro de bucles.

  • No prefiera una string larga de if-else , en su lugar, prefiera usar declaraciones de cambio : por ejemplo:
if(condition 1)
{

}
else
{
   if(condition 2)
   {

   }
   else
   {
   
   }
}

Supongamos que hay otra condición 3, luego el flujo de código es verificar primero la condición 1 , luego la condición 2 y luego alcanzará la condición 3 . Por lo tanto, requiere 3 números de operación. La idea es usar el siguiente código:

switch (c)
{
    // Condition 1
    case 1:
       break;

    // Condition 2
    case 2 :
       break;

       // And so on
}

En el caso del cambio, el compilador irá directamente a la condición y la ejecutará sin ejecutar las otras condiciones.

int i = 3;

// It will increment in the same step
++i;

// It will increment in the next step
// so it will take more time
i++;
  • También se debe evitar el uso del puntero , donde se puede evitar. Un puntero apunta a la dirección de una variable, esa dirección se utilizará para acceder a la variable. Por lo tanto, intente acceder directamente a la variable, ya que se pueden usar directamente y, por lo tanto, se puede reducir el tiempo.
  • Use la clase StringBuilder o StringBuffer para la concatenación en lugar del operador ‘”+”
        1.Using "+" operator
        String x="";
        char c='a';
        for(int i=0;i<10000;i++)
          x+=c;
          
        2.Using StringBulider/StringBuffer Class
        StringBuilder sb=new StringBuilder("");
        char c='a';
        for(int i=0;i<10000;i++)
         sb.append(c);
        String x=sb.toString();

Ambos hacen el mismo trabajo (hacer una string de 10000 copias del carácter ‘a’). Pero la segunda opción toma 10 veces menos tiempo que la primera.

Por lo tanto, siempre es recomendable usar StringBuilder (en Java) en lugar del operador «+» para la concatenación.

Publicación traducida automáticamente

Artículo escrito por harshit17 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *