View Best Time to Buy and Sell Stock on LeetCode
Statistics
Time Spent Coding
15 minutes
Time Complexity
O(n) - Each element in prices
is only visited once, resulting in the O(n) time complexity.
Space Complexity
O(1) - The number of variables created is independent of n, resulting in the O(1) space complexity.
Runtime Beats
99.72% of other submissions
Memory Beats
37.33% of other sumbissions
Explanation
Before iterating through the prices, we must initialize buy,
sell,
and profit.
buy
and sell
are set to values they will never exceed to allow for our program to function properly, and profit
is set to 0.
We now iterate through each price p
in prices.
- If the price is less than our current buy price, we must reset our
buy
andsell
variables to the current price. This is similar to setting ourbuy
andsell
variables to values they will never exceed, allowing us to essentially “reset” our variables to a state where our program will function properly. - If the price exceeds our current sell price, we set
sell
equal to it and update the profit to the maximum price, either the difference between the sell and buy or the previous profit. - If none of these conditions are satisfied, do nothing
Once all elements in p
have been visited, we exit the for loop and return profit.
Solution
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def maxProfit(self, prices: List[int]) -> int:
buy,sell = inf,-inf
profit = 0
for p in prices:
if p < buy:
buy = sell = p
elif p > sell:
sell = p
profit = max(profit, sell - buy)
return profit