from typing import List


def efficient_profit(arr: List[int]) -> int:
    """
    More efficient O(n) approach to finding the largest jump in a list.
    :param arr: the array of stock values
    :return: the maximum profit that could be made per stock

    >>> efficient_profit([])
    0
    >>> efficient_profit([0])
    0
    >>> efficient_profit([1, 4 ,2, 6, 3])
    5
    >>> efficient_profit([9, 11, 8, 5, 7, 10])
    5
    """
    # Keep track of the smallest element seen so far.
    if len(arr) < 2:
        return 0

    smallest_elem = arr[0]
    biggest_diff = 0
    for candidate in arr[1:]:
        diff = candidate - smallest_elem
        if diff > biggest_diff:
            biggest_diff = diff

        if candidate < smallest_elem:
            smallest_elem = candidate

    return biggest_diff