Wpis z mikrobloga

Pytanie do #python i #programowanie. Funkcja ma przejrzec liste int i podac pierwszy int ktory ma swoja kopie w tej liscie. Jesli zaden numer sie nie powtarza, ma wyrzucic -1. Problem rowiazalem swoim sposobem, ale znalezlem 'polecana' funkcje. Zadanie z codefights. Jest mi ktos w stanie wytlumaczyc jak ta funkcja dziala, bo siedze nad tym od 20 minut i zrozumiec nie moge (dopiero zaczynam przygode z programowaniem).

def firstDuplicate(A):
....for x in A:
........A[abs(x) - 1] *= -1
........if A[abs(x) - 1] > 0:
............return abs(x)
....return -1
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@werteryzm: Ten kod chyba faktycznie jest bez sensu, albo ja nie rozumiem jak miał działać. Skompilowałem to i wrzuciłem jakiś array, który specjalnie miał w sobie liczbę większą niż długość tabeli i tak jak myślałem wywaliło indexError.
  • Odpowiedz
  • 0
@PBL616: zdał wszystkie testy na stronie z której korzystam. To rozwiązanie jakiegoś ziomka, a żeby wrzucić rozwiązanie musi ono działać. Na 100% to jest jakis duży skrót który oszczędza pamięć i skraca czas iteracji ale nie potrafię go rozgryźć
  • Odpowiedz
@werteryzm: Dobra, już wiem. Po prostu indexem jest wartość danego oczka w tabeli, jeżeli jakiś index jest wywołany 2 razy to jego wartość jest dodatnia (bo 2 razy mnoży go przez -1). Ten kod wygląda jakby odpowiednią kombinacją cyfr można by go było wykraczyć.
  • Odpowiedz
@werteryzm: Nie, po prostu nie przepisałeś wszystkich warunków zadania:
https://medium.com/@joshsaintjacque/algorithms-exercise-find-the-first-duplicate-in-an-array-e97e9ed282c1

contains only numbers in the range from 1 to a.length


W tym przypadku działa to dobrze - jeśli po pomnożeniu przez -1 liczba jest dodatnia, to znaczy że już wcześniej była pomnożona przez -1, czyli jest duplikatem(o najmniejszym indeksie w tabeli). Pewnie nie doczytałeś dokładnie warunków zadania.
  • Odpowiedz