시간순으로 회사의 주가 목록이 있다고 가정하고 주식을 사고팔 때 얻을 수 있는 최대 이익을 찾아야 합니다. 매도하기 전에 매수해야 하고 매도 후 하루를 기다려야 다시 매수할 수 있습니다.
따라서 입력이 가격 =[2, 6, 9, 4, 11]과 같으면 출력은 11이 됩니다. 2에서 구매하고 6에서 판매하고 하루를 기다렸다가 4에서 구매하고 11시에 판매합니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
-
s :=0
-
b :=-무한대
-
범위 0에서 가격 크기까지의 i에 대해
-
온도 :=b
-
b :=최대 b 및 (s - 가격[i])
-
i가 0이 아니면
-
s :=s의 최대값 및 (temp + price[i - 1])
-
-
-
s의 최대값을 반환하고 (b + 가격의 마지막 요소)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시
class Solution: def solve(self, prices): s = 0 b = float("-inf") for i in range(len(prices)): temp = b b = max(b, s - prices[i]) if i: s = max(s, temp + prices[i - 1]) return max(s, b + prices[-1]) ob = Solution() prices = [2, 6, 9, 4, 11] print(ob.solve(prices))
입력
[2, 6, 9, 4, 11]
출력
11