def maxProfit(prices): """ :type prices: List[int] :rtype: int """ # Use iterative loop to look for the greatest profit, not the only profit after the lowest # lowest = min(prices) # if lowest == prices[len(prices)-1]: # print('no profit') # return 0 # for i in range(len(prices)): # if lowest == prices[i]: # k = i+1 # # print(f'k is {k}') # profit = max(prices[k:]) - lowest # print(profit) # return profit # Code Timed out # profit = [] # for i in range(len(prices)): # for j in range(i+1, len(prices)): # if prices[i] < prices[j]: # profit.append(prices[j] - prices[i]) # # print(max(profit)) # if not profit: # return 0 # return max(profit) # Code with faster Implementation min_price = prices[0] # Track the minimum price seen so far max_profit = 0 # Track the maximum profit for price in prices: # print(f'price is {price}') # print(f'MinPrice: {min_price} or {price}') # print(f'MaxProfit: {max_profit} or [{price} - {min_price} = {max(max_profit, price - min_price)}]') min_price = min(min_price, price) # Update the minimum price max_profit = max(max_profit, price - min_price) # Update the maximum profit return max_profit # maxProfit([7,1,5,3,6,4]) maxProfit([7,6,4,3,1]) # maxProfit([2,4,1])