Способы удаления TLE
При решении задач на любом онлайн-судье иногда может быть превышен лимит времени. Ниже приведены некоторые из способов оптимизации кода:
- Сведите к минимуму использование циклов внутри циклов, т. Е. Вложенных циклов : Например:
для (я = 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.