Skip to main content

Best Time to Buy and Sell Stock

Problem

You are given an array prices where prices[i] is the price of a given stock on the ith day.

You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.

Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.

 

Example 1:

Input: prices = [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell.

Example 2:

Input: prices = [7,6,4,3,1]
Output: 0
Explanation: In this case, no transactions are done and the max profit = 0.

 

Constraints:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

Solution

/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
let maxDiff = 0;
let buyPrice = prices[0];
for (let i = 1; i < prices.length; i++) {
const sellPrice = prices[i];
if (buyPrice < sellPrice) {
maxDiff = Math.max(maxDiff, sellPrice - buyPrice)
} else {
buyPrice = sellPrice
}
}
return maxDiff;
};

Observe that in order to maximize profits, the buy price buyPrice should always be the lowest price in prices that we have encountered so far. This means, if the current price is lower then our recorded buyPrice, update buyPrice to this new value. Otherwise, check if selling would give us a larger profit, and update maxDiff accordingly.