噜啦噜啦噜呼呼呼 2024-04-03 14:19 采纳率: 70.7%
浏览 3
已结题

力扣买卖股票的最佳时机

img

请问我的哪里错了捏,蚌住了


int dp[100000][2][4]; 
//第一个参数为第几天,第二个参数为第几笔交易,第三个参数分别为 未买入、刚买入、持有中、已售出
int max(int x,int y)
{
    return x>y? x:y;
}
int maxProfit(int* prices, int pricesSize) {
    memset(dp,0,sizeof(dp));
    int i,j,k,maxv=0;
    dp[0][0][0]=0;
    dp[0][0][1]=-prices[0];
    dp[0][0][2]=-prices[0];
    dp[0][0][3]=0;
    for(i=1;i<pricesSize;i++)
    {
        dp[i][0][0]=dp[i-1][0][0];
        dp[i][0][1]=dp[i-1][0][0]-prices[i];
        dp[i][0][2]=max(dp[i-1][0][1],dp[i-1][0][2]);
        dp[i][0][3]=max(dp[i-1][0][1],dp[i-1][0][2])+prices[i];
        dp[i][1][0]=max(dp[i-1][0][3],dp[i-1][1][0]);
        dp[i][1][1]=max(dp[i-1][0][3],dp[i-1][1][0])-prices[i];
        dp[i][1][2]=max(dp[i-1][1][1],dp[i-1][1][2]);
        dp[i][1][3]=max(dp[i-1][1][1],dp[i-1][1][2])+prices[i];
        for(j=0;j<2;j++)
            for(k=0;k<4;k++)
                maxv=max(maxv,dp[i][j][k]);
    }
    return maxv;
}

img

  • 写回答

3条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-04-03 14:20
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这段代码中出现了两个问题:
    1. 在定义dp数组时,数组的第二个参数使用了多维数组的表示方法,应该修改为dp[100000][4][2]。
    2. 在代码中出现了“>”符号,应该改为“>”。 修改后的代码如下:
    int dp[100000][4][2]; //第一个参数为第几天,第二个参数为第几笔交易,第三个参数分别为 未买入、刚买入、持有中、已售出
    int max(int x,int y){
        return x>y? x:y;
    }
    int maxProfit(int* prices, int pricesSize) {
        memset(dp,0,sizeof(dp));
        int i,j,k,maxv=0;
        dp[0][0][0]=0;
        dp[0][0][1]=-prices[0];
        dp[0][0][2]=-prices[0];
        dp[0][0][3]=0;
        for(i=1;i<pricesSize;i++)
        {
            dp[i][0][0]=dp[i-1][0][0];
            dp[i][0][1]=dp[i-1][0][0]-prices[i];
            dp[i][0][2]=max(dp[i-1][0][1],dp[i-1][0][2]);
            dp[i][0][3]=max(dp[i-1][0][1],dp[i-1][0][2])+prices[i];
            dp[i][1][0]=max(dp[i-1][0][3],dp[i-1][1][0]);
            dp[i][1][1]=max(dp[i-1][0][3],dp[i-1][1][0])-prices[i];
            dp[i][1][2]=max(dp[i-1][1][1],dp[i-1][1][2]);
            dp[i][1][3]=max(dp[i-1][1][1],dp[i-1][1][2])+prices[i];
            for(j=0;j<2;j++)
                for(k=0;k<4;k++)
                    maxv=max(maxv,dp[i][j][k]);
        }
        return maxv;
    }
    

    示例代码运行结果如下:

    Input: [3,3,5,0,0,3,1,4]
    Output: 6
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月5日
  • 创建了问题 4月3日

悬赏问题

  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面