23 lines
1.1 KiB
Python
23 lines
1.1 KiB
Python
# Best Time to Buy and Sell Stock
|
|
|
|
class Solution:
|
|
def maxProfit(self, prices: list[int]) -> int:
|
|
dp = [0] * len(prices)
|
|
max_price = prices[-1]
|
|
for i in range(len(prices)-2, -1, -1):
|
|
dp[i] = max_price - prices[i]
|
|
max_price = max(max_price, prices[i])
|
|
|
|
return max(dp)
|
|
|
|
"""
|
|
걸린 시간: 15분
|
|
|
|
복잡도: n길이의 dp 테이블을 뒤에서부터 한번만 순회하면서 채우기 때문에 시간복잡도는 O(n)이다.
|
|
n길이의 dp 테이블을 만들기 때문에 공간복잡도도 O(n)이다.
|
|
|
|
해설: 산 것은 미래에만 팔 수 있기 때문에 미래가 없는 것부터 미래를 하나씩 늘려가면서 미래의 최대 값과 수익의 최대값을 갱신하면 되겠다고 생각했다.
|
|
dp[i]는 i번째 날에 사는 경우 얻을 수 있는 이익의 최대값이다. i번째 날에 샀을 때는 지금까지 오면서 price가 가장 컸던 날에 팔면 된다.
|
|
|
|
사실 전체 날짜에 대한 정보 기록 없이 뒤에서 앞으로 가면서 지금까지의 최대 price와 profit만 기억해두면 공간복잡도를 O(1)로 줄일 수 있다.
|
|
""" |