diff --git a/0121_best-time-to-buy-and-sell-stock/README.md b/0121_best-time-to-buy-and-sell-stock/README.md new file mode 100644 index 0000000..7fa4d1f --- /dev/null +++ b/0121_best-time-to-buy-and-sell-stock/README.md @@ -0,0 +1,25 @@ +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` \ No newline at end of file diff --git a/0121_best-time-to-buy-and-sell-stock/python3/solution.py b/0121_best-time-to-buy-and-sell-stock/python3/solution.py new file mode 100644 index 0000000..52d56a0 --- /dev/null +++ b/0121_best-time-to-buy-and-sell-stock/python3/solution.py @@ -0,0 +1,20 @@ +# Time: O(N) +# Space: O(1) +class Solution: + def maxProfit(self, prices: List[int]) -> int: + if len(prices) < 1: return 0 + + i, j = 0, 1 + max_profit = 0 + + while i <= j < len(prices): + max_profit = max(prices[j] - prices[i], max_profit) + + # Buy low, sell high — so we need to keep moving i (like + # a buy pointer) if jth price is smaller than what ith is. + if prices[j] < prices[i]: + i = j + else: + j += 1 + + return max_profit