Punkt równowagi to indeks takiego elementu tablicy, ze wszystkie elementy leżące po lewej stronie mają taką samą jak te które leżą po jego prawej stronie. Nie każda tablica ma taki punkt, ale są takie co mają ich kilka.
Weźmy przykładowo tablicę [2, 1, 9, 3]. W tym przypadku punktem równowagi jest wartość 9, ponieważ 2 + 1 = 3. W tablicy mogą występować również wartości ujemne oraz 0. W tablicy [-1, 3, 2, 5, 1, 1, 0, 2]. W tym przypadku podział wyznacza liczba 5, ponieważ rozdzielna na dwie podtablice [-1, 3, 2] oraz [1, 1, 0, 2], których suma elementów jest taka sama.
Możliwych wyborów punktu równowagi jest dokładnie tyle ile tablica ma elementów. Proste rozwiązanie polega na sprawdzeniu każdego z nich. Nie będzie to rozwiązanie najbardziej efektywne, ponieważ wymaga zsumowania odpowiednio n elementów n razy. To daje w rezultacie O(n2).
Optymalne rozwiązanie zadania polega na zsumowaniu wszystkich elementów, a następnie przeglądanie kolejnych kandydatów na punkt równowagi na bieżąco aktualizując sumę po jego lewej i prawej stronie. Najgorszy przypadek wymaga przejrzenia elementów w celu ich zsumowania, a następnie przejrzenia tablicy jeszcze raz. Oznacza to, że złożoność czasowa optymalnego rozwiązanie wyniesie O(n).
Poniższa funkcja punktRownowagi() szuka w podanej tablicy tab punktu równowagi w prosty sposób.
Dla każdego możliwego indeksu, który może być punktem równowagi liczymy sumę elementów na lewo od niego i odejmujemy każdy element, który znajduje się na prawo od aktualnie wybranego. Jeśli na koniec iteracji wynik to 0 oznacza to, że i-ty element jest punktem równowagi. Należy wtedy zwrócić numer indeksu. Jeśli jednak indeks nie zostanie znaleziony to należy zwrócić -1.
Poniższa funkcja punktRownowagi() znajduje punkt równowagi w czasie liniowym:
Na początku obliczamy sumę wszystkich elementów. Następnie przechodzimy po kolejnych elementach odpowiednio aktualizując odpowiednio wcześniej obliczoną sumę. Otóż od sumy należy odjąć aktualnie wybrany element, ponieważ nie należy on już do prawej strony. Jeśli suma dotychczas odrzuconych elementów oraz zaktualizowanej sumy jest równa to punkt równowagi został znaleziony. W przeciwnym razie należy dołączyć odrzucony element do sumy odrzuconych. To gwarantuje, że zawsze tablica jest podzielona na dwie sumy lewej i prawej strony.
Poniższy fragment kodu wczytuje tablicę, a następnie wypisuje na ekran indeks pod którym znajduje się punkt równowagi, albo komunikat, że nie istnieje.