회사의 주가 목록이 시간 순서대로 있고 하나의 판매 거래에 대한 거래 수수료도 있다고 가정합니다. 우리는 그 주식을 여러 번 사고 팔 때 얻을 수 있는 최대 이익을 찾아야 합니다. 판매하기 전에 먼저 구매해야 합니다.
따라서 입력이 가격 =[2, 10, 4, 8] 수수료 =3과 같으면 출력은 6이 됩니다. 2에서 사고 10에서 팔 수 있고 수수료 3이 발생하므로 이익은 5입니다. . 그런 다음 4에 사고 8에 팔고 수수료 3이 발생하므로 이익 1, 총 이익 6입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
-
n :=가격의 크기
-
함수 recur() 를 정의하십시오. 이것은 i:=0 및 플래그 :=0
을 취합니다. -
i가 n과 같으면
-
0 반환
-
-
플래그가 거짓이면
-
recur(i + 1, 1)의 최대값을 반환 - 가격[i] 및 recur(i + 1, 0)
-
-
recur(i + 1, 1) 및 recur(i + 1, 0) + 가격[i]의 최대값을 반환 - 수수료
-
기본 메소드 호출에서 recur()
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시
class Solution: def solve(self, prices, fee): n = len(prices) def recur(i=0, flag=0): if i == n: return 0 if not flag: return max(recur(i + 1, 1) - prices[i], recur(i + 1, 0)) return max(recur(i + 1, 1), recur(i + 1, 0) + prices[i] - fee) return recur() ob = Solution() prices = [2, 10, 4, 8] fee = 3 print(ob.solve(prices, fee))
입력
[2, 10, 4, 8], 3
출력
6