[Programming Fundamentals] Arrays and Methods - More Exercises 09. Jump Around
Здравейте колеги,
това ми е кода https://pastebin.com/Nv3apm8X.
Не ми минава с един тест за време, иска ми се да разбера защо :))
и да си мина теста,разбира се :)
Здравейте колеги,
това ми е кода https://pastebin.com/Nv3apm8X.
Не ми минава с един тест за време, иска ми се да разбера защо :))
и да си мина теста,разбира се :)
Здравей колега.
В цикъла while след първия if сложи else if.
Ето така: else if (pos - step >= 0)
Защото няма смисъл ако може да скочи на дясно да проверява дали ще може да скочи наляво.
На първо гледане, забелявам следните места за оптимизации по твоето решение:
- Многократно ползване на sequence.Length в цикъла. Това не е "безплатна" операция и в такива ситуации е добре да използваш променлива, напр. int lenght = sequence.Length
- Повтарящи се по смисъл проверки за край на while цикъла и в тялото на цикъла:
while (!(pos + step > sequence.Length && pos - step < 0))
if (pos + step < sequence.Length)
if (pos - step >= 0)
Може да промениш цикъла на while (true) и да го break-неш като му дойде времето.
- Както е отбелязал и колегата @DJColdBrain по-горе, втората проверка е излишна. Един вариант е да използваш else-if. Друг вариант е да използваш continue в тялото на първия if.
Ето едно решение с тези "оптимизации".
(използвам long за типовете данни, което най-вероятно е излишно, но в случая си ценя времето повече от това на Judge и се презастваховам, вместо да се чудя защо ми фейлва един от 10 теста :))
Много полезно.Благодаря
А къде мога да прочета за подобни сведения от сорта на това,че като викам .length си коства време :)
Като човек, имащ някакъв опит с други езици за програмиране (напр. C++/C, при които лесно може да се намерят "тесните места" в програмите), преживявам голям "културен шок" от сблъсъка си със C# заради performance и memory usage спецификите (бих използвал думата проблеми, но това ще е пресилено), върху които все още имам много малък контрол чрез кода. Visual Studio и Resharper се състезават да ми предлагат "оптимизации" на кода, който съм написал и почти винаги предложеното от тях е по-четимо, кратко и "приятно за окото", докато не дойде време за изпълнение на програмата или пускане в Judge, и се види колко много памет и/или време използва (сравнено отново с "другите" езици).
Ето няколко по-кратки страници със съвети по темата:
Effective C# - Performance notes
Performance Tips and Tricks in .NET Applications
5 Tips to Improve Performance of C# Code
StringBuilder and String Concatenation
14 C# Tips that improve code efficiency and productivity
Много от нещата в горните линкове се повтарят, но са едно добро начало.
Тук има структурирани съвети с препратки към по-подробни описания и тестове - като цяло доста добра страница:
https://www.dotnetperls.com/optimization
Да не забравяме и Google - най-добрият приятел на всеки програмист!
Успех!
Здравейте,
имам проблем с първия тест, останалите минават!
това ми е кода: https://pastebin.com/RzpzVNJb
Колега, малко късно, но все пак ето едно много интересно и по-кратко решение :)
https://pastebin.com/BD8PdcLV
и това се отразява на бързината до такава степенн ? :)
Всъщност да. Ако например имаш много скокове на дястно той всеки път ще проверява за ляв скок.
И ако бъде по средата и може да скочи на дясно той след първия скок е възможно да скочи надясно.