Hej,
aktualnie przerabiamy algorytmy na studiach i spróbowałem swoich sił w metodzie naiwnej.
import random
myList = []
N = 15
maxL = 0
maxW = 0
for i in range(0,N):
myList.append(random.randint(0,10))
for i in range(0,N):
W = myList[i]
L = 0
for j in range(0,N):
if (myList[j] == W):
L=L+1
if (L > maxL):
maxL = L
maxW = W
for i in myList:
print(i)
print('Najczestszy element ' + str(maxW) + ' wystapil: ' + str(maxL) + ' razy')
# Drugi sposob
maxW = 0
maxL = 0
for i in myList:
freq = myList.count(i)
if freq > maxW:
maxL = freq
maxW = myList[i]
print('Najczestszy element ' + str(maxW) + ' wystapil: ' + str(maxL) + ' razy')
Pomijam już fakt, że szybkość działania nie należy do najszybszych, jestem dopiero początkującym.
Czy ktoś byłby w stanie pomóc znaleźć w miarę optymalne rozwiązanie metody naiwnej oraz co zrobić w przypadku gdy 2 cyfry występują tą samą ilość razy? A drugie pytanie mam odnośnie tego kawałka kodu:
for i in range(0,N):
W = myList[i]
L = 0
for j in range(0,N):
if (myList[j] == W):
L=L+1
if (L > maxL):
maxL = L
maxW = W
W debuggerze w Visual Studio Code najpierw jest przelatywana 15 razy wartość i =0, później 15 razy i=1 itd. Natomiast te same pętle napisane w C++ wydaje mi się, że debugują się trochę inaczej, mianowicie zawsze wraca na początek pętli do i, a nie tylko do j. Czy ktoś byłby w stanie to wytłumaczyć?