Способы удаления TLE

Опубликовано: 16 Мая, 2021

При решении задач на любом онлайн-судье иногда может быть превышен лимит времени. Ниже приведены некоторые из способов оптимизации кода:

  • Сведите к минимуму использование циклов внутри циклов, т. Е. Вложенных циклов : Например:
 для (я = 0; я <п; я ++)
     {
           для (j = 0; j <n; j ++)
           {
                // Ваш код
           }
      }

Приведенный выше код выполнит N * N итераций и займет больше времени, чтобы избежать этого, идея состоит в том, чтобы подумать о подходе, который минимизирует использование циклов внутри циклов.

  • Не предпочитайте длинную цепочку if-else , вместо этого используйте операторы Switch : Например:
 если (условие 1)
{

}
еще
{
   если (условие 2)
   {

   }
   еще
   {
   
   }
}

Предположим, есть еще одно условие 3, тогда поток кода должен сначала проверить условие 1 , затем условие 2, затем он достигнет условия 3 . Следовательно, требуется 3 числа операции. Идея состоит в том, чтобы использовать приведенный ниже код:

 переключатель (c)
{
    // Условие 1
    Дело 1:
       перерыв;

    // Условие 2
    случай 2:
       перерыв;

       // И так далее
}

В случае переключения компилятор перейдет непосредственно к условию и выполнит их, не выполняя другие условия.

  • Вместо использования «i = i + 1» лучше использовать «++ i» , а вместо «i = i + 3» используйте «i + = 3» .
  • Лучше предпочесть пре-инкремент или пре-декремент перед пост-инкрементом и пост-декрементом до тех пор, пока это не потребуется. Например:
 int я = 3;

// Он будет увеличиваться на том же шаге
++ i;

// Он будет увеличиваться на следующем шаге
// так что потребуется больше времени
i ++;
  • Также следует избегать использования указателя там, где его можно избежать. Указатель указывает на адрес переменной, этот адрес будет в дальнейшем использоваться для доступа к переменной. Поэтому попробуйте получить прямой доступ к переменной, так как они могут использоваться напрямую и, следовательно, можно сократить время.
  • Используйте класс StringBuilder или StringBuffer для конкатенации вместо оператора «+»
 1. С помощью оператора "+"
        Строка x = "";
        char c = 'а';
        для (int я = 0; я <10000; я ++)
          х + = с;
          
        2. Использование класса StringBulider / StringBuffer
        StringBuilder sb = новый StringBuilder ("");
        char c = 'а';
        для (int я = 0; я <10000; я ++)
         sb.apppend (c);
        Строка x = sb.toString ();

Оба они выполняют одну и ту же работу (создают строку из 10000 копий символа «а»). Но второй вариант занимает в 10 раз меньше времени, чем первый.

Поэтому всегда рекомендуется использовать StringBuilder (в java) вместо оператора «+» для конкатенации.

Вниманию читателя! Не переставай учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Получите все важные математические концепции для соревновательного программирования с курсом Essential Maths for CP по доступной для студентов цене.

Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.