Mam problem na #codewars #python może miał ktoś podobnie.
Mianowicie zadanie poelga na tym, że by znaleźć unikalną wartość w liscie No i testy mi przechodzi prawidłowo, ale jak dam Attempt to jest błąd "Execution Timed Out", czyli coś jakby nieskoczona pętla czy coś, a to niemożliwe chyba. Mój kod:
def find_uniq(arr): for n in arr: if arr.count(n) == 1: return n # n: unique integer in the array return None #programowanie #naukaprogramowania
@Spofity: Przy każdym kroku pętli for spwrawdzasz tablicę metodą count(), która też leci po całej liście, w ten sposób masz złożonością obliczeniową O(n2). Spróbuj znaleźć takie rozwiązanie, które nie będzie używało metody count.
@bm9pY2h1ag: Jest to złożoność O(n * m) gdzie dla odpowiednio dużego m mamy O(n**2) Poza tym wczytaj się w kod, on iteruje po unikalnych wartościach z seta, i woła count na oryginalnej niezmienionej liście. Ot całe przyśpieszenie względem oryginalnej metody
przecież dokładnie to samo napisałem wyżej tylko zamiast dict użyłem set? ( ͡°͜ʖ͡°)
@zarev: Tak wiem, nie doczytałem, zauważyłem już po dodaniu mojego komentarza. Ale po przeczytaniu widzę u ciebie błędy. Pierwszy taki, że zwracasz None gdy w sekwencji jest więcej niż jeden unikalny element. A drugi, że set nie trzyma kolejności, więc gdy unikalnych będzie więcej niż jeden element, to nie ma gwarancji
@ProfesorBigos: @zarev: z treści wstawionej przez OPa można wywnioskować, że będzie tylko jedna liczba, która nie jest unikatem. Wtedy wystarczy XOR na wszystkich elementach listy i zwrócić wynik (zakładając, że wszystkie liczby są rożne od zera).
Dino zatrudnia muzułmanki, no nie.... tego to już za dużo.
A nie, czekaj. To po prostu polka, która owinięta się czymkolwiek, by się ogrzać, bo najbogatszy człowiek w Polsce nie potrafi zapewnić minimalnej, rozsądnej temperatury w swoich marketach #dino
Mianowicie zadanie poelga na tym, że by znaleźć unikalną wartość w liscie
No i testy mi przechodzi prawidłowo, ale jak dam Attempt to jest błąd "Execution Timed Out", czyli coś jakby nieskoczona pętla czy coś, a to niemożliwe chyba. Mój kod:
def find_uniq(arr):for n in arr:
if arr.count(n) == 1:
return n # n: unique integer in the array
return None
#programowanie #naukaprogramowania
Tak to wygląda teraz i przeszło od razu: https://pastebin.com/rn6MsZGb
Jak można by to ogarnąć jeszcze szybciej?
Poza tym wczytaj się w kod, on iteruje po unikalnych wartościach z seta, i woła count na oryginalnej niezmienionej liście. Ot całe przyśpieszenie względem oryginalnej metody
@Lunatik: @bm9pY2h1ag: otóż to
Komentarz usunięty przez autora
def find_uniq(arr):....oberved = dict()
....unique = dict()
Komentarz usunięty przez autora
@zarev: Tak wiem, nie doczytałem, zauważyłem już po dodaniu mojego komentarza. Ale po przeczytaniu widzę u ciebie błędy. Pierwszy taki, że zwracasz None gdy w sekwencji jest więcej niż jeden unikalny element. A drugi, że set nie trzyma kolejności, więc gdy unikalnych będzie więcej niż jeden element, to nie ma gwarancji
Komentarz usunięty przez autora
XORna wszystkich elementach listy i zwrócić wynik (zakładając, że wszystkie liczby są rożne od zera).Komentarz usunięty przez autora