Способы удаления 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.