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;
    }
};
目录
相关文章
|
11月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
109 0
|
10月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
210 4
|
11月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
110 2
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
183 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
149 6
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
149 2
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
151 1
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
171 1
|
算法
leetcode188 买卖股票的最佳时机IV
leetcode188 买卖股票的最佳时机IV
131 0
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
176 0

热门文章

最新文章