Професионална програма
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 3701 Точки
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