To jest pytanie do wywiadu, którego używam jako ćwiczenia programistyczne.Jak przecinać dwie posortowane liczby całkowite bez duplikatów?
Wejście: dwa posortowane tablice całkowite A i B w rosnącej kolejności i różne rozmiary N i M odpowiednio
wyjściowa: posortowanej tablicy całkowitą C w porządku rosnącym, która zawiera elementy, które są dostępne w obu a i B
contraints: duplikaty nie są dozwolone C
Przykład: dla wejścia A = {3,6,8,9} i B = {4,5,6,9,10,11}, wynik powinien wynosić C = {6,9}
Dziękuję za odpowiedzi, wszystkie ! Podsumowując, istnieją dwa główne podejścia do tego problemu:
Moim oryginalnym rozwiązaniem było zachowanie dwóch wskaźników, po jednym dla każdej macierzy i skanowanie z lewej do prawej strony zamiennie, podczas wybierania pasujących elementów. Kiedy więc bieżący element jednej tablicy jest większy niż druga, ciągle zwiększamy wskaźnik drugiej tablicy, dopóki nie znajdziemy bieżącego pierwszego elementu tablicy lub nie przekroczymy go (znajdź większy). Wszystkie pasują do osobnej tablicy, która jest zwracana po dojściu do końca jednej z tablic wejściowych.
Innym sposobem, w jaki możemy to zrobić, jest przeskanowanie jednej z tablic liniowo, podczas korzystania z wyszukiwania binarnego, aby znaleźć dopasowanie w drugiej tablicy. To by oznaczało czas O (N * log (M)), jeśli skanujemy A i dla każdego z jego wyszukiwania binarnego N elementów na B (czas O (log (M)).
Zaimplementowałem oba podejścia i przeprowadziłem eksperyment, aby zobaczyć, jak te dwie rzeczy są porównywane (szczegóły na ten temat można znaleźć here). Metoda Binary Search wydaje się wygrywać, gdy M jest około 70 razy większa niż N, gdy N ma 1 milion elementów.
Proszę powiedzieć nam o swoim pytaniu? – home
To powinno przejść do przeglądu kodu zamiast: – Phonon
Tylko dlatego, że jedna tablica jest większa, nie oznacza to, że połączenie obu tablic spowoduje ten sam rozmiar. –