릿코드 121. Best Time to Buy and Sell Stock
릿코드 121. Best Time to Buy and Sell Stock
이 글은 Tistory에서 이전된 포스팅입니다. 원본은 여기에서 확인할 수 있습니다.
문제
저점(buy), 고점(sell)을 변수로 두고 생각했는데 O(n^2) 밖에 안떠올랐고 Discussion 열어봤다.
저점이 바뀔 때,
저점 뒤에(저점보다 늦은 시간에) 고점이 온다면, 이전의 저점이 더 큰 profit을 볼 일은 없다.
저점 앞에 고점이 있었다면, 이전 저점과 고점에 따른 profit을 기억해둔다. 그리고 고점은 저점 뒤에 있어야 하므로 바뀐 저점에 고점을 같이 위치시킨다.
1을 확정하고 생각을 풀어나가면 떠올랐을 거 같다.
1
2
3
4
5
6
7
8
9
10
11
12
def maxProfit(self, prices: List[int]) -> int:
buy, sell, profit = prices[0], prices[0], 0
for i in range(1, len(prices)):
val = prices[i]
if val < buy:
profit = max(profit, sell - buy)
buy = val
sell = val
elif val > sell and val > buy:
sell = val
return max(profit, sell-buy)
이 기사는 저작권자의 CC BY-NC 4.0 라이센스를 따릅니다.