Biorąc pod uwagę połączoną listę liczb całkowitych w losowej kolejności, podziel ją na dwie nowe połączone listy tak, aby różnica w sumie elementów każdej listy była maksymalna, a długość list różni się o nie więcej niż 1 (w przypadku, gdy pierwotna lista zawiera nieparzystą liczbę elementów). Nie mogę założyć, że liczby na liście są unikalne.podzieli listę połączoną na dwie równe listy zawierające najmniejsze i największe liczby
Algorytm myślałem żeby zrobić coś w rodzaju scalania na pierwotnej liście połączonej (O (n & middot; log n) czas, O (n) kosmiczny), a następnie użyć funkcji rekurencyjnej chodzić do koniec listy, aby określić jej długość, wykonując podział w trakcie rozwijania funkcji rekursywnej. Funkcja rekursywna to O (n) czasu i O (n) przestrzeni.
Czy to jest optymalne rozwiązanie? Mogę opublikować mój kod, jeśli ktoś uważa, że jest to istotne.
Jeżeli twój Implementacja listy powiązanej zachowuje właściwość wielkości, a następnie musisz przejść tylko połowę listy, aby podzielić ją na pół. (Może chcieć sprawdzić http://codereview.stackexchange.com!) – Jeremy
@Jeremy Heiler: Brak właściwości rozmiaru, tylko bardzo prosta podstawowa lista połączona z jane, naprawdę nic więcej niż kilka połączonych ze sobą węzłów. –
Jeśli twój egzamin nie wymaga wdrożenia sortowania, możesz również użyć Collections.sort do sortowania. – karakuricoder