Powiel możliwe:
Counting inversions in an arrayJak znaleźć liczbę przewrotów w tablicy?
To phone interview question: "Znajdź liczbę inwersji w tablicy". Chyba mają na myśli rozwiązanie O (N log N). Wierzę, że nie może być lepsza niż O (N log N), ponieważ jest to złożoność sortowania.
Odpowiedzi do similar question można podsumować w następujący sposób:
- Oblicz połowę odległości elementów powinien być przeniesiony do sortowania tablicy: skopiowanie tablicy i sortowania kopię. Dla każdego elementu oryginalnej tablicy
a[i]
znajdź jego pozycjęj
w posortowanej kopii (wyszukiwanie binarne) i zsumuj połówki odległościabs(i - j)/2
. Zmienić
merge sort
: modyfikowaćmerge
liczyć inwersje między dwoma posortowanych tablic i uruchomić regularnemerge sort
z tym zmodyfikowanymmerge
.Czy ma to sens? Czy istnieją inne (być może prostsze) rozwiązania? Czy nie jest to zbyt trudne dla rozmowy telefonicznej?
Możesz znaleźć n log n rozwiązanie kodowane w języku Java tutaj: http: // stackoverflow.com/questions/337664/counting-inversions-in-an array/6424847 # 6424847 –