TIL # 116 : [Algorithm] LeetCode 121. Best Time to Buy and Sell Stock

셀레스틴 허·2021년 4월 19일
0

ALGORITHM

목록 보기
16/18
post-thumbnail

Best Time to Buy and Sell Stock

문제

You are given an array prices where prices[i] is the price of a given stock on the ith day.

You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.

Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0

예시

Example 1:

Input: prices = [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell.

Example 2:

Input: prices = [7,6,4,3,1]
Output: 0
Explanation: In this case, no transactions are done and the max profit = 0.

Constraints

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

1차 시도 - 1476 ms / 25.1 MB MB

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        
        while prices:
            leng = len(prices)
            profit = 0
            min_price = prices[0]
            
            for i in range(1,leng):
                profit = max(profit, prices[i] - min_price)
                min_price = min(min_price, prices[i])
                
            return profit

.. while을 써서..짱 느리고 무거운건가? 다시 해보자..

2차 풀이 코드(while 제거해보기) - 1416 ms / 25.3 MB

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        
        if not prices:
            return 0
        
        leng = len(prices)
        profit = 0
        min_price = prices[0]

        for i in range(1,leng):
            profit = max(profit, prices[i] - min_price)
            min_price = min(min_price, prices[i])

        return profit

효과는 미미했다.. 다른 사람의 풀이를 찾아보기로 했다.

Javascript Solution

1차 풀이 코드 - 104 ms / 48.9 MB

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    let first = prices[0]
    let maxProfit = 0
    
    for (let i=0; i < prices.length; i++){
        if(prices[i] < first){
            first = prices[i]
        } else {
            maxProfit = Math.max(maxProfit, prices[i] - first)
        }
    }
    
    return maxProfit
};
profile
Software Developer / 고통은 필연, 괴로움은 선택

0개의 댓글