首页 > 编程语言 >算法学习day50动态规划part11-123、188

算法学习day50动态规划part11-123、188

时间:2023-06-07 23:13:44浏览次数:60  
标签:int part11 len prices length 123 Math day50 dp

package LeetCode.DPpart11;
/**
 * 123. 买卖股票的最佳时机 III
 * 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格.
 * 设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。
 * 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
 * */
public class BestTimetoBuyandSellStockIII_123 {
    public int maxProfit(int[] prices) {
        int len = prices.length;
        // 边界判断, 题目中 length >= 1, 所以可省去
        if (prices.length == 0) return 0;

        /*
         * 定义 5 种状态:
         * 0: 没有操作, 1: 第一次买入, 2: 第一次卖出, 3: 第二次买入, 4: 第二次卖出
         */
        int[][] dp = new int[len][5];
        dp[0][1] = -prices[0];
        // 初始化第二次买入的状态是确保 最后结果是最多两次买卖的最大利润
        dp[0][3] = -prices[0];

        for (int i = 1; i < len; i++) {
            dp[i][1] = Math.max(dp[i - 1][1], -prices[i]);
            dp[i][2] = Math.max(dp[i - 1][2], dp[i][1] + prices[i]);
            dp[i][3] = Math.max(dp[i - 1][3], dp[i][2] - prices[i]);
            dp[i][4] = Math.max(dp[i - 1][4], dp[i][3] + prices[i]);
        }

        return dp[len - 1][4];
    }

}
package LeetCode.DPpart11;
/**
 * 188. 买卖股票的最佳时机 IV
 * 给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格,和一个整型 k 。
 * 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次,卖 k 次。
 * 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
 * */
public class BestTimetoBuyandSellStockIV_188 {
    public int maxProfit(int k, int[] prices) {
        if (prices.length == 0) return 0;

        // [天数][交易次数][是否持有股票]
        int len = prices.length;
        int[][][] dp = new int[len][k + 1][2];

        // dp数组初始化
        // 初始化所有的交易次数是为确保 最后结果是最多 k 次买卖的最大利润
        for (int i = 0; i <= k; i++) {
            dp[0][i][1] = -prices[0];
        }

        for (int i = 1; i < len; i++) {
            for (int j = 1; j <= k; j++) {
                // dp方程, 0表示不持有/卖出, 1表示持有/买入
                dp[i][j][0] = Math.max(dp[i - 1][j][0], dp[i - 1][j][1] + prices[i]);
                dp[i][j][1] = Math.max(dp[i - 1][j][1], dp[i - 1][j - 1][0] - prices[i]);
            }
        }
        return dp[len - 1][k][0];
    }
}

 

标签:int,part11,len,prices,length,123,Math,day50,dp
From: https://www.cnblogs.com/lipinbigdata/p/17464828.html

相关文章

  • CF101234A Hacker Cups and Balls【二分+线段树】
    Description给一个长度为n的排列,对它做m次操作,每次对[l,r]区间内进行升序/降序排序。问最后的序列处于最中心的数是多少(n为奇数)。Solution是一类没有写过的题,参考题解。二分答案,对于当前的mid,将大于等于mid的数设置为1,小于mid的数设置为0。这样一来,叶结点的值......
  • 123
     <!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title></title> </head> <scriptsrc="js/jquery-1.12.4.js"></script> <style> article{ height:100px; } a......
  • #123
    Byassigningdifferentweightstotheauthenticandforgedclasses,Weight-BCELossensuresthatthemodelpaysmoreattentiontotheminorityclass(i.e.,forgedimages)duringtraining.Thisisimportantbecausethenumberofauthenticimagesusuallyout......
  • poj 1230(贪心)
    解题思路:这道题目是用贪心的思想,从左向右扫描场地的每一列是否合法。若不合法,贪心的找出从该列起向右延伸最长的m道墙,移除这m道墙使得该列合法。我最开始代码会出现这样的问题:如果两个墙是连在一起的,那么会被当做一个墙来处理。。。AC:#include<iostream>#include<cstdio>#inclu......
  • comp2123 问题解答
    comp2123Assignment5s12023Problem1.Wewanttodesignadivideandconqueralgorithmforcomputingtheunionofacollectionofrectangles.Theinputrectanglesarealignedwiththeaxesandtheyareallstabbedbythey-axis.Eachrectangleisrepresen......
  • GE控制器WES5123-1200,WES5123-2600
    W;① ⑧ 0  ③  0 ①  7  ⑦ 7 5 ⑨  GE控制器WES5123-1200,WES5123-2600,WES5162-9101,IC695CPU320-HS,DS200DCFBG1BLC,IS420ESWBH3A,IC695CRU320-EJ,IS420ESWBH2A,DS200TCPDG2BECIC695CPU315-CD,fdevelopmentinthesensorindustry.当电力系统中的电力......
  • 1232131
    步骤1:安装必要的软件包首先,需要确保系统已安装dhcp、tftp-server和httpd等软件包。可以使用以下命令进行安装:yuminstall-ydhcptftp-serverhttpdsyslinux-tftpbootxinetd步骤2:配置DHCP服务器接下来,需要配置DHCP服务器以向客户端分配IP地址。在/etc/dhcp/d......
  • 123. 买卖股票的最佳时机 III
    classSolution{public:intmaxProfit(vector<int>&prices){intn=prices.size();vector<int>f(n+1),g(n+1);//预处理f,f[i]表示前i天交易的最大值for(inti=1,min_price=INT_MAX;i<=n;i++)//根据当前是否卖出划分{......
  • STATA 字母 ABCDEF 转 123456
    clearinputstr10var1ABCDEFendcap:sscinstallsencodesavecishi1,replaceencodevar1,generate(var2)tostringvar2,replacegenvar4=tobytes(var1)genvar6=substr(tobytes(var1),3,.)genvar8=char(real(substr(tobytes(var1),3,.))-16) ......
  • Auto_Position=1 主库清空部分binlog从库错误(1236)的解决办法
    环境:OS:Centos7DB:mysql5.7.291.从库同步错误如下:mysql>showslavestatus\G;***************************1.row***************************Slave_IO_State:Master_Host:192.168.1.104Master_User:repl......