leetcode日记(106)买卖股票的最佳时机Ⅲ

算是困难题里比较容易写的题目了,只是思路可能有些新奇(好吧后来发现只有我的思路如此新奇)。

我的做法是根据先前的经验,先从前往后遍历一次,记录每遍历到一个位置的最大收益,接着从后往前遍历,同样找最大收益,看取哪个相加收益最大就行。

这种做法最大缺点就是只有只能买两次能用,要是能买三次四次就用不了了。

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int forward[100001];
        int maxx=0;
        int minn=100000;
        for(int i=0;i<prices.size();i++){
            maxx=max(prices[i]-minn,maxx);
            minn=min(prices[i],minn);
            forward[i]=maxx;
        }
        int result;
        maxx=0;minn=100000;
        for(int i=prices.size()-1;i>=0;i--){
            minn=min(prices[i]-maxx,minn);
            maxx=max(prices[i],maxx);
            result=max(result,forward[i]-minn);
        }
        return result;
    }
};

答案用的是动态规划,用时和消耗空间差不多,也更容易理解一些,非常好解析:

cpp 复制代码
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int buy1=-prices[0],sell1=0,buy2=-prices[0],sell2=0;
        for(int i=1;i<prices.size();i++){
            buy1=max(buy1,-prices[i]);
            sell1=max(sell1,prices[i]+buy1);
            buy2=max(buy2,sell1-prices[i]);
            sell2=max(sell2,prices[i]+buy2);
        }
        return sell2;
    }
};
相关推荐
Lsk_Smion3 分钟前
力扣实训 _ [200].岛屿数量
算法·leetcode·深度优先
Boom_Shu10 分钟前
长方形的关系
数据结构·c++·算法
ZhengEnCi40 分钟前
O07-银行家算法
算法
装不满的克莱因瓶1 小时前
图像尺寸调整:缩放矩阵如何改变像素坐标?
人工智能·线性代数·数学·算法·机器学习·矩阵
Lumbrologist1 小时前
【C++】零基础入门 · 第 13 节:类与对象基础
java·c++·算法
LONGZETECH1 小时前
软硬协同+故障注入:无人机仿真维修与操控仿真底层算法逻辑拆解
大数据·c语言·算法·3d·unity·无人机
Lsk_Smion1 小时前
力扣实训 _ [543].二叉树的直径 _ [23].合并K个升序列表
数据结构·算法·leetcode
凯瑟琳.奥古斯特2 小时前
力扣1235:加权区间调度最优解
java·python·算法·leetcode·职场和发展
耶叶2 小时前
餐厅出入最少人数问题:贪心算法
算法·贪心算法