Crypto Master C# Advanced Exam Retake - 3 September 2017
Това ми е кода https://pastebin.com/Np6ciyDR
9-тия тест гърми за време, идеи ?
Това ми е кода https://pastebin.com/Np6ciyDR
9-тия тест гърми за време, идеи ?
Ето - https://pastebin.com/SG1AFWa0
Малко преправих логиката във вътрешния цикъл и работи. Нямаш нужда от HashSet-а. Може просто да броиш редицата и ако е по - дълга от текущата най - дълга да запазиш новата дължина.
Успех!
Здравейте,
Около 3 часа се мъчих с тази задача, като се опитвах по всевъзможни начини да оптимизирам решението дотолкова, че да слезе под лимита за време. И при мен точно на деветия тест беше над лимита - 0.403с. при ограничение 0.250с. Разковничето се оказа в начина на достъпване до броя на елементите в числовия масив (при мен "numbers"). След като замених .Count() метода с .Length свойството (property), времето ми спадна точно под лимита - 0.246с. Има противоречиви мнения в StackOverflow относно това, дали действително има разлика в производителността... в случая с тази задача мисля, че именно тази промяна свърши работа.
Мерси много, според теб добавянето в HashSet-a ли забавяше нещата?
Едва ли точно добавянето да е проблема. По - вероянно е съвкупност от многото операции и проверки, които правиш.
На всяка итерация в while-а имаш по един contains и един add. Отделно на всяка итерация на върешния for-цикъл имаш clear(). Отделно повече if-проверки.
Сега си представи, че инпута ти е редицата [1, 2, 3,.........., 2500, 0], резултат ще има на последната итерация на вътрешния for, съответно имаш над 3млн итерации на while със всичките му там проверки, add(), contains()...