LeetCode/Best Time to Buy and Sell Stock II @ 카시와노하 코워킹 스페이스 KOIL

8179 단어 파이썬leetcode
( 블로그 기사 의 전재)

오늘은 카시와노하의 코워킹 스페이스에 와 보았습니다.

[ htps //w w. 31ゔぇ 얽힌 s. jp/ゔぇんつれおふふせ/こい l/ ]

일본 최대급인 것 같기 때문에, 여기까지의 퀄리티가 다른 것도 있는 것은 아니라고 생각합니다만,
1일(9시-23시까지)로 1500엔
그래서 압도적인 코스파에 경악하고 있습니다.

카시와의 잎이라고 하는 것으로 나의 자택으로부터 door2door로 1시간 약 걸립니다만, 이동 지치지 않고, 여기까지 오면 하고 싶다고 하는 기분이 되는, 딱 좋은 상태의 입지입니다.

글쎄, 오늘의 문제.

[ h tps : // / ㅇ t 여기. 코 m / p 로 b ぇ ms / 베 st - 치메 - 브 y - 앙 d - 셋 ls와 ck 좋다 / ]

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete as many transactions as you like (i.e., buy one and sell one share of the stock multiple times).

Note: You may not engage in multiple transactions at the same time (i.e., you must sell the stock before you buy again).

Example 1:

Example 2:

Example 3:

마지막 기사 의 주제입니다.
이번에는 1번 자르는 매매가 아니라, 몇번이나 매매를 반복했을 때, 최대의 이익은 얼마가 되는지 산출하는 문제입니다.
다만 같은 날에 판매할 수 없다고 합니다.

해답·해설



해법 1

이번 문제는 다음날 값이 올라가거나 같으면 팔지 않고 기다리고 내려가면 팔리는 최적의 행동을 알아차리면 간단합니다.
그리고 또 간결한 코드와 이마이치한 코드를 나란히 둡니다.
우선 내 submit 코드.
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        max_profit, sell, buy = 0, float('-inf'), float('inf')
        i = 0
        while i < len(prices):
            buy = min(buy, prices[i])
            if prices[i] > buy:
                sell = prices[i]
                while i < len(prices)-1 and sell <= prices[i+1]:
                    sell = prices[i+1]
                    i += 1
                max_profit += sell - buy
                sell, buy = float('-inf'), float('inf')
            i += 1
        return max_profit

다음날에 값이 올라가거나 같으면 팔지 않고 기다리고, 내려가면 팔겠다는 행동을 그대로 코드에 떨어뜨리고 있습니다.

해법 2

이어서 Solution을 Python으로 번역한 코드입니다. 사고 방식은 위와 같습니다만,
'값이 떨어질 때까지 팔지 않고 기다릴' 때 얻은 이익은 1일당 값 차이의 합과 같습니다.
라는 관계를 사용하여 보다 간결한 코드에 떨어뜨리고 있습니다.
아래 그림의 이미지입니다.

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if len(prices) < 2:
            return 0
        else:
            profit = 0
            for i in range(len(prices)-1):
                if prices[i] < prices[i+1]:
                    profit += prices[i+1] - prices[i]
            return profit

좋은 웹페이지 즐겨찾기