Maximum Gain in Stock Prices

Given an array of price fluctuations throughout the day for a stock in the stock market, find the buy and sell price that would have yielded the maximum gain for the day.

Hint: The maximum gain is not necessarily related to the high price or low price of the day. To make a gain, a buy needs to occur before a sell, and the buy price must be lower than the sell price.

This can be solved in one pass through the prices, or O(n).

var buy = 0
var sell = 0
var max = 0
var low = prices[0]
var high = prices[0]

for i in 1 ..< prices.count {
    let price = prices[i]

if price - low > max {
        max = price - low
        sell = price
        buy = low
    }

if price < low {
        low = price
    }

if price > high {
        high = price
    }
}

print("buy \(buy) sell \(sell)")
print("low \(low) high \(high)")
print("max \(max)")
var buy = 0
var sell = 0
var max = 0
var low = prices[0]
var high = prices[0]

for i in 1 ..< prices.count {
    let price = prices[i]

if price - low > max {
        max = price - low
        sell = price
        buy = low
    }

if price < low {
        low = price
    }

if price > high {
        high = price
    }
}

print("buy \(buy) sell \(sell)")
print("low \(low) high \(high)")
print("max \(max)")
var buy = 0
var sell = 0
var max = 0
var low = prices[0]
var high = prices[0]

for i in 1 ..< prices.count {
    let price = prices[i]

if price - low > max {
        max = price - low
        sell = price
        buy = low
    }

if price < low {
        low = price
    }

if price > high {
        high = price
    }
}

print("buy \(buy) sell \(sell)")
print("low \(low) high \(high)")
print("max \(max)")