2020年4月28日 星期二

[LeetCode] 122. Best Time to Buy and Sell Stock II 解題思路 (Easy)



這題股票買賣需要賣出最高價格。




LeetCode 題目連結

 

https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/

 

題目

Say you have an array prices 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:
Input: [7,1,5,3,6,4]
Output: 7
Explanation: Buy on day 2 (price = 1) and sell on day 3 (price = 5), profit = 5-1 = 4.
             Then buy on day 4 (price = 3) and sell on day 5 (price = 6), profit = 6-3 = 3.
Example 2:
Input: [1,2,3,4,5]
Output: 4
Explanation: Buy on day 1 (price = 1) and sell on day 5 (price = 5), profit = 5-1 = 4.
             Note that you cannot buy on day 1, buy on day 2 and sell them later, as you are
             engaging multiple transactions at the same time. You must sell before buying again.
Example 3:
Input: [7,6,4,3,1]
Output: 0
Explanation: In this case, no transaction is done, i.e. max profit = 0.

Constraints:
  • 1 <= prices.length <= 3 * 10 ^ 4
  • 0 <= prices[i] <= 10 ^ 4

Accept 作法


這題時間複雜度 O(n),空間複雜度O(1)。


Runtime: 2 ms
Memory: 42 MB

Java 程式碼

class Solution {
    public int maxProfit(int[] prices) {
       
        if(prices.length == 0){
            return 0;
        }
        
        int lastNum = prices[0];
        int buyNum = 0;
        int sellSum = 0;
    
        for(int i = 1;i<prices.length;i++){
           if(lastNum >=prices[i]){
             buyNum = lastNum;
           }else{
             int sellPrice = prices[i] - lastNum;
             sellSum += sellPrice;
           }
            
            lastNum = prices[i];
       } 
        return sellSum;
    }
}

 

更多 LeetCode 相關資源

 

複習程式面試書籍


除了 LeetCode 練習外,我也入手了這本,題庫來自真正的面試,並非摘自教科書。它們反映出頂尖公司真正會出的題目,你可以藉此做好充分準備
需要的話可以看看,寫得很仔細。
 

書名:提升程式設計師的面試力:189道面試題目與解答



相關 LeetCode文章一律會放在 程式解題 標籤分類,歡迎持續追蹤。

沒有留言:

張貼留言