Skip to content

Approach 1 sliding window

sliding window类型题目做的第一题, 实际上sliding window就是two pointer的一个变种,如何巧妙的运用pointer来让one-pass traversal来获取multi-pass traversal一样的信息(做到同样的事情)

Intuition

Algorithm

  • 先设置一个pointer指向目前array中的最小值,同时设置一个max_profit variable来储存最大收益值
  • traverse the array一遍, 按以下order做事情:
  • 如果有更低的价格, pointer指向那个值, 下一个iteration
  • 如果没有更低的价格,但计算current day price - min value的值超过max_profit, update max_profit
  • 都不满足,do nothing, 下一个ieration

Complexity

  • Time complexity: \(O(n)\) one pass solution
  • Space complexity: \(O(1)\)

Code

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        # sliding window approach O(n) in time, O(1) in space

        # two pointer 
        min_price = float('inf')
        max_difference = 0

        # not gonna buy on last day
        for i in range(len(prices)):
            if prices[i] < min_price:
                min_price = prices[i]
            elif prices[i] - min_price > max_difference:
                max_difference = prices[i] - min_price

        return max_difference