123.买卖股票的最佳时机II

这篇具有很好参考价值的文章主要介绍了123.买卖股票的最佳时机II。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原题链接:

123.买卖股票的最佳时机II

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/

完成情况:

123.买卖股票的最佳时机II,java学习,算法知识,# LeetCode题解,代理模式,leetcode,算法,数据结构文章来源地址https://www.toymoban.com/news/detail-828563.html

参考代码:

_122买卖股票的最佳时机II_可以多次买入卖出01

package 代码随想录.动态规划;

public class _122买卖股票的最佳时机II_可以多次买入卖出01 {
    public int maxProfit(int[] prices) {
        //贪心递推过去
        int len = prices.length;
        if (len < 2){
            return 0;
        }
        int res = 0;
        for (int i = 1; i < len; i++){
            int difference = prices[i] - prices[i - 1];
            //只要能赚就进货,
            //你也可以先购买,然后在 同一天 出售。
            if (difference > 0){
                res += difference;
            }
        }
        return res;
    }
}

_122买卖股票的最佳时机II_可以多次买入卖出02

package 代码随想录.动态规划;

public class _122买卖股票的最佳时机II_可以多次买入卖出02{
    public int maxProfit(int[] prices) {
        //贪心递推过去
        int len = prices.length;
        if (len < 2){
            return 0;
        }
        int res = 0;
        for (int i = 1; i < len; i++){
            res += Math.max(prices[i] - prices[i-1],0);
        }
        return res;
    }

}

_122买卖股票的最佳时机II_常规dp

package 代码随想录.动态规划;

public class _122买卖股票的最佳时机II_常规dp {
    /**
     *
     * @param prices
     * @return
     */
    public int maxProfit(int[] prices) {
        int len = prices.length;
        if (len < 2){
            return 0;
        }
        //0:持有现金
        //1:持有股票
        //状态转移 0-> 1-> 0 -> 1-> 0 -> 1-> 0
        int dp [][] = new int[len][2];
        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        //递推数组
        for (int i = 1; i < len; i++){
            //给dp每一组的两个变量赋值进去
            dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1] + prices[i]);
            dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0] - prices[i]);
        }
        return dp[len - 1][0];
    }
}

_122买卖股票的最佳时机II_一维dp

package 代码随想录.动态规划;

public class _122买卖股票的最佳时机II_一维dp {
    /**
     *
     * @param prices
     * @return
     */
    public int maxProfit(int[] prices) {
        int len = prices.length;
        if(len < 2) return 0;
        //cash: 现金
        //hold: 持有股票
        //状态数组
        //状态转移:
        int [] cash = new int[len];
        int [] hold = new int[len];
        cash[0] =0;
        hold[0] = -prices[0];
        for (int i = 1;i<len;i++){
            //这两行调换顺序也是可以的
            cash[i] = Math.max(cash[i-1],hold[i-1] + prices[i]);
            hold[i] = Math.max(hold[i-1],cash[i-1] - prices[i]);
        }
        return cash[len- 1 ];
    }
}

_122买卖股票的最佳时机II_滚动数组

package 代码随想录.动态规划;

public class _122买卖股票的最佳时机II_滚动数组 {
    /**
     *
     * @param prices
     * @return
     */
    public int maxProfit(int[] prices) {
        int len = prices.length;
        if (len < 2) return 0;
        int cash = 0;
        int hold = -prices[0];

        int preCash = cash;
        int preHold = hold;
        for (int i = 1; i < len; i++) {
            cash = Math.max(preCash,preHold + prices[i]);
            hold = Math.max(preHold,preCash - prices[i]);
            preCash = cash;
            preHold = hold;
        }
        return cash;
    }
}

错误经验吸取

到了这里,关于123.买卖股票的最佳时机II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 贪心算法|122.买卖股票的最佳时机II

    力扣题目链接 贪心思路出来了,代码居然如此简单啊! 本题首先要清楚两点: 只有一只股票! 当前只有买股票或者卖股票的操作 想获得利润至少要两天为一个交易单元。 #贪心算法 这道题目可能我们只会想,选一个低的买入,再选个高的卖,再选一个低的买入.....循环反复

    2024年04月16日
    浏览(31)
  • ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

     123.买卖股票的最佳时机III     188.买卖股票的最佳时机IV 

    2024年02月12日
    浏览(39)
  • day 43 | ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

    ● 188.买卖股票的最佳时机IV 和买卖股票3中的思路一样,只不过从两次换成了k次

    2024年02月10日
    浏览(36)
  • 刷题第四十二天 123. 买卖股票的最佳时机Ⅲ 188. 买卖股票的最佳时机Ⅳ

    和前一题的限制在于只能买卖两次,所以dp数组多定义一个状态,分别表示第一次持有 第一次不持有和第二次持有 第二次不持有,然后进行更新。 注意初始化的时候 第一次持有和第二次持有都需要默认0-prices[0] 和前一题的差别就是可以多次买卖,所以定义一个三维数组,表

    2024年02月05日
    浏览(47)
  • 123. 买卖股票的最佳时机 III

    123. 买卖股票的最佳时机 III - 力扣(LeetCode) 给定一个数组,它的第   i  个元素是一支给定的股票在第  i   天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成  两笔  交易。 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)

    2024年02月07日
    浏览(41)
  • 算法 贪心2 || 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

    如果想到其实 最终利润是可以分解的 ,那么本题就很容易了! 如何分解呢? 假如第0天买入,第3天卖出,那么利润为:prices[3] - prices[0]。 相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。 此时就是把利润分解为每天为单位的维度,而不是从0天到第3天整体去

    2023年04月13日
    浏览(46)
  • 121.买卖股票的最佳时机 122.买卖股票的最佳时机II

    力扣题目链接(opens new window) 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最

    2024年01月17日
    浏览(38)
  • Day32 贪心算法 part02 122. 买卖股票的最佳时机 II 55. 跳跃游戏 45. 跳跃游戏 II

    思路:计算每天的利润,利润如果为正,加到结果中去

    2024年01月19日
    浏览(44)
  • 122. 买卖股票的最佳时机 II

      两题的本质是一样的,只不过含手续费多了一个手续费,手续费可以在买的时候一并扣掉就行。   这两题的关键在于到理解dp数组创建的意义,这两题dp数组创建的意义为 到今天为止,持有状态和未持有状态的最优情况 ,dp[i]就可以根据dp[i-1]也推出最优情况,只需要考

    2024年02月15日
    浏览(41)
  • 力扣122. 买卖股票的最佳时机 II

    思路: 假设 dp[i][0] 是第 i 天手上没有股票时的最大利润, dp[i][1] 是第 i 天手上有 1 支股票的最大利润; dp[i][0] 的迁移状态为: dp[i - 1][0],前一天手上已经没有股票,没有发生交易; dp[i - 1][1] + prices[i],前一天手上有 1 支股票,第 i 天将其卖掉获得收益 prices[i]; 所以,

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包