LeetCode 122. 买卖股票的最佳时机(贪心算法)

简介: LeetCode 122. 买卖股票的最佳时机(贪心算法)

122. 买卖股票的最佳时机


小白解法

思路

我这种解法相比于贪心算法略微有些繁琐。大致思路是找到每一段上升子序列,那么在上升子序列的结尾处,即 p r i c e s [ i ] > p r i c e s [ i + 1 ] 时,计算这一整段的获利。然后更新上升子序列起始位置,重复上述过程。


这样写有一个问题:例如 [ 1 , 2 , 3 , 4 , 5 ] 这一判例,找不到这样一个转折点,会爆栈。我用了一个取巧的办法,给原数组增添一个小于零的元素,强行制造转折点。


代码实现

class Solution
{
public:
    int maxProfit(vector<int> &prices)
    {
        int buy = 0, sold = 0, res = 0;
        prices.push_back(-1);
        for (int i = 0; i < prices.size()-1; i++)
        {
            if (prices[i] > prices[i + 1])
            {
                sold = i;
                res += prices[sold] - prices[buy];
                buy = i + 1;
            }
        }
        return res;
    }
};


贪心算法

思路

因为交易次数不受限,所以把所有的上坡全部收集,一定是利益最大化的。即寻找每一个 a [ i ] − a [ i − 1 ] > 0 的区间。需要说明的是,贪心算法只能用于计算最大利润,计算的过程并不是实际的交易过程。例如 [ 1 , 2 , 3 , 4 , 5 ] ,对于所有 1 ≤ i < n 都有 a [ i ] > a [ i − 1 ],所有结果为 4 44


但实际上并不是进行4次买入和4次卖出,而是在第一天买入,第五天卖出。


代码实现

class Solution
{
public:
    int maxProfit(vector<int> &prices)
    {
        int ans = 0;
        int n = prices.size();
        for (int i = 1; i < n; ++i)
        {
            if (prices[i] > prices[i - 1])
            {
                ans += prices[i] - prices[i - 1];
            }
        }
        return ans;
    }
};
目录
相关文章
|
18天前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
36 0
|
5天前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
15 2
|
2月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
57 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
2月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
47 6
|
2月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
63 2
|
2月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
46 1
|
2月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
46 1
|
2月前
|
算法
leetcode188 买卖股票的最佳时机IV
leetcode188 买卖股票的最佳时机IV
59 0
|
2月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
72 0
|
2月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
37 0