To zostało niedawno zadane znajomemu w wywiadzie i nie znamy żadnego innego rozwiązania poza prostym O (n).Znajdź wszystkie triplety w tablicy z sumą mniejszą lub równą podanej sumie.
Czy istnieje jakiś lepszy algorytm?
Chodzi o to, aby znaleźć wszystkie tryplety w tablicy całkowitej, których suma jest mniejsza niż lub równa określonej sumy S
uwaga: nie widać innych takich problemów na tak z wydajnością O (N log n), ale wszystkie z nich rozwiązały łatwiejszą wersję tego problemu, np. gdzie arr[i] + arr[j] + arr[k] = S
lub gdzie tylko sprawdzały, czy istnieje jeden taki triplet.
Moje pytanie jest, aby znaleźć wszystkie i,j,k
w arr[]
takie, że arr[i] + arr[j] + arr[k] <= S
Tak, myślę, że to będzie zmniejszyć złożoność n2.log (n) – user2250246
podejście można poprawić trochę, po sortowaniu i filtrowania trzeba będzie B tablicę o długości n. Następnie musisz powtórzyć elementy tablicy 'B [i]' i wykryć okna 'B [j..k]', które są odpowiednie dla następnej formuły: ...
j = 1; if (B[i]+B[j] <= S) { k = binarySearch(B, B[j] + B[i]); loop over j..k and print. }
– user486075@ user486075 Próbuję mój najlepiej zrozumieć twoje słowo. Czy masz na myśli to, że gdy 'arr [i] + arr [j]> S' trzyma, nie potrzebujemy binarnego szukania' k' w ogóle? –