Best Day to Buy and Sell a Stock
Problem
An array lists the daily price of one share of a stock in chronological order. Choose a day to buy and a strictly later day to sell. Return the largest profit you can earn. If no positive profit is possible, return 0.
Input
prices = [8, 3, 6, 4, 9, 5]Output
6Buy on day 1 at price 3, sell on day 4 at price 9. Profit = 9 − 3 = 6.
def best_profit(prices):
min_so_far = float("inf")
best = 0
for p in prices:
if p < min_so_far:
min_so_far = p
if p - min_so_far > best:
best = p - min_so_far
return best
function bestProfit(prices) {
let minSoFar = Infinity;
let best = 0;
for (let i = 0; i < prices.length; i++) {
if (prices[i] < minSoFar) minSoFar = prices[i];
const profit = prices[i] - minSoFar;
if (profit > best) best = profit;
}
return best;
}
class Solution {
public int bestProfit(int[] prices) {
int minSoFar = Integer.MAX_VALUE;
int best = 0;
for (int p : prices) {
if (p < minSoFar) minSoFar = p;
if (p - minSoFar > best) best = p - minSoFar;
}
return best;
}
}
int bestProfit(vector<int>& prices) {
int minSoFar = INT_MAX, best = 0;
for (int p : prices) {
if (p < minSoFar) minSoFar = p;
if (p - minSoFar > best) best = p - minSoFar;
}
return best;
}