Maintain a list of possible leaders as you work through the array/list. This list is naturally sorted descending. Each new element is a possible new leader. If its bigger than the last found possible leader, then you have to eliminate all leaders smaller than this new possible leader and append it to the now truncated list. Otherwise, just append it to the list of possible leaders.
Python:
def findleaders(array):
leaders = []
for element in array:
if element < leaders[-1]:
# new possible leader
leaders.append(element)
else:
# remove false possible leaders
while leaders[-1] < element:
leaders.pop()
if not leaders: break #stop when list is empty
leaders.append(element)
return leaders