Профил
Loading...
+ Нов въпрос
msotiroff avatar msotiroff 136 Точки
Best Answer

Ето - https://pastebin.com/SG1AFWa0
Малко преправих логиката във вътрешния цикъл и работи. Нямаш нужда от HashSet-а. Може просто да броиш редицата и ако е по - дълга от текущата най - дълга да запазиш новата дължина.
Успех!

1
NikolayPopov avatar NikolayPopov 253 Точки

Мерси много, според теб добавянето в HashSet-a ли забавяше нещата?

0
msotiroff avatar msotiroff 136 Точки

Едва ли точно добавянето да е проблема. По - вероянно е съвкупност от многото операции и проверки, които правиш.
На всяка итерация в while-а имаш по един contains и един add. Отделно на всяка итерация на върешния for-цикъл имаш clear(). Отделно повече if-проверки.
Сега си представи, че инпута ти е редицата [1, 2, 3,.........., 2500, 0], резултат ще има на последната итерация на вътрешния for, съответно имаш над 3млн итерации на while със всичките му там проверки, add(), contains()...

1
StefanLB avatar StefanLB 2 Точки

Здравейте,

 

Около 3 часа се мъчих с тази задача, като се опитвах по всевъзможни начини да оптимизирам решението дотолкова, че да слезе под лимита за време. И при мен точно на деветия тест беше над лимита - 0.403с. при ограничение 0.250с. Разковничето се оказа в начина на достъпване до броя на елементите в числовия масив (при мен "numbers"). След като замених .Count() метода с .Length свойството (property), времето ми спадна точно под лимита - 0.246с. Има противоречиви мнения в StackOverflow относно това, дали действително има разлика в производителността... в случая с тази задача мисля, че именно тази промяна свърши работа.

0