Loading...
nakometa avatar nakometa 4 Точки

10. *SoftUni Exam Results (Time Limit)

Здравейте на 10 задача от Exercise: Associative Arrays [Речници] ми дава Time Limit на 7 тест. Попринцип не съм се сблъсквал много с Time Limit проблема и не съм сигурен как да си оправя кода. 

Линк към кода ми - https://pastebin.com/7JwDACzW

Тагове:
MartinBG avatar MartinBG 4803 Точки
Best Answer

Забавянето изглежда е от тук:

            foreach (var user in users.OrderByDescending(x => x.Value[1]).ThenBy(x => x.Key).Where(x => x.Value[1] != "banned"))
            {
                Console.WriteLine($"{user.Key} | {user.Value[1]}");
            }

 

Промених го така и мина:

            var sortedUserResults = users
                .Where(x => x.Value[1] != "banned")
                .OrderByDescending(x => x.Value[1])
                .ThenBy(x => x.Key);
            foreach (var user in sortedUserResults)
            {
                Console.WriteLine($"{user.Key} | {user.Value[1]}");
            }

 

Забележете, че съм преместил филтрирането на резултатите (.Where(...)) преди самото сортиране. Така се премахват невалидните резултати още преди сортирането, което ще ускори нещата, ако има много такива, но това (филтър преди сортиране) е правилният подход винаги, дори и да няма нито един "banned".

Другата съществена разлика е, че съм изнесъл резултата от сортирането като отделна променлива (sortedUserResults). Не съм сигурен защо това има значение - нормало бих очаквал, че сортирането ще се извърши само веднъж и foreach ще се изпълни върху този резулат, но без тази промяна задачата все още не минаваше в Judge. Може би не успява да сработи някоя оптимизация на C# и това води до забавяне на кода.

0
25/11/2020 15:23:58
nakometa avatar nakometa 4 Точки

Мерси много за отговора, не се бях замислял за това. Аз пробвах само да сложа .Where в началото и при мен мина без да създавам нов var, благодарско.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.