力扣HOT100之贪心算法:121. 买卖股票的最佳时机

力扣HOT100之贪心算法:121. 买卖股票的最佳时机_第1张图片
这道题直接构造一个差分数组来做,假设我在第i天买入股票,在第j天卖出股票,那么所获得的利润为prices[j] - prices[i]这一结果可以裂项为(prices[j] - prices[j - 1]) + (prices[j - 1] - prices[j - 2] )+ …+ (prices[i + 1] - prices[i]),然后我们可以构造一个差分数组diffdiff[i] = prices[i] - prices[i - 1]因此我们再定义一个变量benifits,遍历diff数组求元素和,只要元素和出现了负数(对利润没有贡献,不如不买股票),则立刻将benifit置为0,同时我们用一个变量result记录此期间产生的最大利润,每一次计算完benifits后,通过result = max(result, benifits)来维护最大利润。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int result = 0;
        int benifits = 0;
        vector<int> diff(prices.size(), 0);
        //构造差分数组
        for(int i = 1; i < diff.size(); i++)
            diff[i] = prices[i] - prices[i - 1];
        for(int i = 0; i < diff.size(); i++){
            benifits = benifits + diff[i] < 0 ? 0 : benifits + diff[i];
            result = max(result, benifits);
        }
        return result;
    }
};

你可能感兴趣的:(力扣HOT100,leetcode,贪心算法,算法)