Logo for ammarahmed.ca
Easy
May 27, 2025
#sliding-window

121. 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:

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

Example 2:

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

Constraints:

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

      Approach

      We can use a sliding window approach to solve this. We start by initializing our pointers at the first and second element. If the profit is negative, we track the max profit and increment the right pointer. If the profit is negative, we update the left pointer to the right pointers value because we want this newly found small value and continue to increment our right pointer on every iteration.

      Complexity

      Time: O(n)

      We iterate over the array once.

      Space: O(1)

      No extra space is created.

      Solution

      1func maxProfit(prices []int) int { 2 if len(prices) <= 1 { 3 return 0 4 } 5 6 l := 0 7 r := 1 8 maxP := 0 9 for r < len(prices) { 10 p := prices[r] - prices[l] 11 if p > 0 { 12 maxP = max(maxP, p) 13 } else { 14 l = r 15 } 16 r++ 17 } 18 return maxP 19}