LeetCode-122-買賣股票的最佳時機 II

雄獅虎豹 發表於 2021-11-30
LeetCode

買賣股票的最佳時機 II

題目描述:給定一個陣列 prices ,其中 prices[i] 是一支給定股票第 i 天的價格。

設計一個演算法來計算你所能獲取的最大利潤。你可以儘可能地完成更多的交易(多次買賣一支股票)。

注意:你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:貪心演算法

因為不限制買賣的次數,要想得到多次交易的最大收益,實際上就是要得到正向的差值為正的累加和,因為對於任意一段正向正差值,實際上都可以假設做了一次買賣操作,如果是連續的正差值,則實際上可以看成是一次買賣,最小的數為買入操作,最大的數為賣出操作,所以根據貪心演算法,具體處理過程如下:

  • 遍歷陣列,然後將每一段的正向差值為正數的差值都累加到收益裡面,最後返回result即為預期最大的收益。

可以參考 LeetCode-121-買賣股票的最佳時機,應該還有動態規劃的解法。

/**
 * 買賣股票的最佳時機 II
 */
public class LeetCode_122 {

    /**
     * 貪心演算法
     *
     * @param prices
     * @return
     */
    public static int maxProfit(int[] prices) {
        // 預期最大的收益值
        int result = 0;
        for (int i = 1; i < prices.length; i++) {
            // 獲取每段的正向差值,即為實際的買賣操作
            result += Math.max(0, prices[i] - prices[i - 1]);
        }
        return result;
    }

    public static void main(String[] args) {
        int[] prices = new int[]{7, 1, 5, 3, 6, 4};
        // 測試用例,期望輸出: 7
        System.out.println(maxProfit(prices));
    }
}
【每日寄語】 生活就是一半煙火,一半詩意。手執煙火謀生活,心懷詩意以謀愛。