LeetCode #122: Best Time to Buy and Sell Stock II

Problem

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 (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

Solution

題意

問題的場景是買賣股票。

給定一個大小為n的(但輸入中是沒有明顯地給出來的,此處只是為了闡述題意方便所以設(shè)它的大小為n)數(shù)組,第i個元素的代表第i天股票的價格。

要求設(shè)計一個算法求得可獲得利潤的最大值。在這n天內(nèi),只能買賣一支股票(也就是說不能像現(xiàn)實世界中先買幾股,等過幾天價格低了又賣幾股...)換個說法就是,只有一個蘋果,你今天買了它,明天就沒得繼續(xù)買,必須要賣出去之后才能再買這個蘋果。

在這n天中,交易的次數(shù)是沒有限制的。

分析

這道題很有意思(當(dāng)然也可能是我太笨了···)一開始的想法是,設(shè)計一個算法,求出在這n天內(nèi)通過合理的買賣次數(shù),獲得利潤的最大值。

比如說,給定的價格序列為[1, 3, 5, 2, 4],那么我應(yīng)該找出的算法就應(yīng)該是,在第一天買,第三天賣;第四天買,第五天賣。當(dāng)然因為這個數(shù)組比較簡單,所以一眼就能看出來。但是稍微復(fù)雜一點,就比較傷腦筋了。

但是···想了很久沒有想出來,然后看了LeetCode上面的Discuss后···我深深感到自己的智商缺陷。

這道題的正確解法,也是最簡單的解法就是,只要第i-1天的價格比第i天低,那就買;換句話說,只要第i+1天的價格比第i天高,那就賣。

重點就是在這幾天中買賣的次數(shù)是沒有限制的,只要有錢賺那就可以買或者賣。

Code

//Runtime: 6ms
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int result = 0;
        for (int i = 1; i < prices.size(); i++){
            if (prices[i - 1] < prices[i])
                result += prices[i] - prices[i - 1];
        }
        
        return result;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容