Da die Fälle 1-3 alle einen Spitzenwert haben (Wert, der auf beiden Seiten von Werten umgeben ist, die niedriger sind als er selbst oder der Rand des Feldes), und Fall 4 zwei Spitzenwerte hat, die beide an den Enden des Feldes liegen, kann dieses Problem recht einfach gelöst werden durch O(log n)
Zeit für alle Fälle:
Wenden Sie zunächst den 1D-Peak-Finding-Algorithmus an, um einen Peak in der Matrix zu finden.
Tritt der Spitzenwert in der Mitte des Feldes auf (nicht an der ersten oder letzten Position), handelt es sich um Fall Nr. 3, und der Spitzenwert ist auch das Maximum.
Wenn der Spitzenwert entweder das erste oder das letzte Element des Feldes ist, handelt es sich um einen der Fälle 1, 2 oder 4, und das Feld max ist max(first, last).
Python-ähnlicher Pseudocode:
def find-peak(list):
mid=len(list)/2
if (list[mid-1] > list[mid]:
return find-peak(list[:mid-1])
else if (list[mid+1] > list[mid]:
return find-peak(list[mid+1:])
else:
return mid
def find-max(list):
peak = find-peak(list)
if peak==0 or peak==len(list)-1:
return max(list[0], list[-1])
else:
return list[peak]