[JS] Домашно Arrays - 3 задача


10

Малко забих на тези задачи и нямам никаква идея как да ги реша. Тук стигам да момент, в който мога да кажа, кое число колко пъти последователно се повтаря, но не мога да намеря кое е най-повтарящото се последователно число без да му задавам каквато и да е било стойност. Кода ми изглежда нещо такова. Интересно е че никой не пише за това домашно, само аз ли не мога да ги реша, май fail-вам :D.   

        var a = [2, 1, 1, 2, 3, 3, 2, 1, 3, 3, 3, 3];

        var n = a.length;
    
        for ( var i = 0; i <= n; i++) {
 
            var b = a[i];
            var y = a[i+1];
 
            if ( (b == 3) && (b == y) ) {
 
             console.log(b);
                
            }   
        }
 
EDIT: преименуване на заглавие  по конвенция : http://forums.academy.telerik.com/22184/
 



Отговори



13

Само да допълня условието на задачата:

Write a script that finds the maximal sequence of equal elements in an array. Example: {2, 1, 1, 2, 3, 3, 2, 2, 2, 1}  -->  {2, 2, 2}.

Задачката наистина е много интересна. Мен лично доста ме измъчи, докато я реша :). За решението си използвах подсказката от книгата на Наков:

"Сканирайте масива отляво надясно. Всеки път, когато текущото число е различно от предходното, от него започва нова подредица, а всеки път, когато текущото число съвпада с предходното, то е продължение на текущата подредица. Следователно, ако пазите в две променливи start и len съответно индекса на началото на текущата подредица от еднакви елементи (в началото той е 0) и дължината на текущата подредица (в началото той е 1), можете да намерите всички подредици от еднакви елементи и техните дължини. От тях лесно може да се избере най-дългата и да се запомня в две допълнителни променливи – bestStart и bestLen."


от georgi.s.yankov (6219 точки)


0
Колеги,
Задачата ми се стори доста лесна, обаче като я реших и бях сигурен че е вярна, резултата не беше очаквания. Тук е кодът: http://pastebin.com/bR2KkmbP . При тестване в конзолата ми дава, че maxCounter=2, а counter = 5?? Не разбирам защо, не виждам грешка, при C# код maxCounter=4, а counter = 1? Може ли някой да погледне и да каже къде е грешката??



0
Линка не работи.

от ivan.mihov1 (4988 точки)

0
На пръв поглед имаш две грешки. Else клаузата на ред 14 не трябва да я има, защото maxCounter не ти се увеличава на всяка итерация, а само когато имаш различни елементи. Тъй като еднаквите елементи са в края на масива програмата излиза от цикъла, защото е стигнала до края на масива, но тъй като няма различни елементи съответно не се записва counter в променливата maxCounter. Другия проблем е със стойността на counter, който не може да стигне до вярната стойност ако еднаквите елементи са в края на цикъла, защото цикъла не включва в броенето последния елемент. EDIT: Да, линка не ти работи заради точката на края.

от anilak (1134 точки)



0
Ето едно решение и от мен - http://pastebin.com/42Lfx3NP . Накратко - обхождам масива и правя проверка дали текущият елемент е равен на следващия. Ако да, уваличавам променливата, която следи за броя на последователните еднакви елементи. Ако съм стигнал до елемент, който не е равен на предхорния сравнявам променливата за най-дълга поредица с най-голямата такава поредица до момента. Интересен е случаят при най-дълга поредица в края на масива - този случай съм го извел извън обхождащия масива цикъл, за да не се пропусне като случай.



0

http://pastebin.com/D0enSBCN

Пичове, мисля че сътворих доста интересно решение ползвайки алгоритъма на Кадан.

 Най-трудното беше да направя така, че ако имам повече от една най-дълга поредица да се изпишат всички.(т.е. 2,2,2,2 и 3,3,3,3)


от ivan.mihov1 (4988 точки)


0
Здравейте,
Да ви представя и моето решение на задачата. Определено си беше предизвикателство. Надявам се да ви е интересен и моя прочит на нещата.
http://pastebin.com/NDB2PBY5
Успех на всички!

от kalina_sf (192 точки)


1

Решението на задачата

задача 3

При проверка дали текущият елемент е равен на следващия (i+1) увеличавам променлива за дълижината с единица. Сравнявам масималната дължина и текущата дължина.



от KaloyanBobev (330 точки)