【算法刷题day49】Leetcode:123.买卖股票的最佳时机III、188. 买卖股票的最佳时机 IV

文章目录

    • [Leetcode 123.买卖股票的最佳时机III](#Leetcode 123.买卖股票的最佳时机III)
    • [Leetcode 188. 买卖股票的最佳时机 IV](#Leetcode 188. 买卖股票的最佳时机 IV)

草稿图网站
java的Deque

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

题目: 123.买卖股票的最佳时机III
解析: 代码随想录解析

解题思路

定义五维*股票数的数组,分别是啥也不干,买第一只,卖第一只,买第二只,卖第二只。

代码

java 复制代码
class Solution {
    public int maxProfit(int[] prices) {
        int [][]dp = new int[5][prices.length];
        dp[1][0] = -prices[0];
        dp[3][0] = -prices[0];
        for (int i = 1; i < prices.length; i++) {
            dp[1][i] = Math.max(dp[1][i-1], dp[0][i-1] - prices[i]);
            dp[2][i] = Math.max(dp[2][i-1], dp[1][i-1] + prices[i]);
            dp[3][i] = Math.max(dp[3][i-1], dp[2][i-1] - prices[i]);
            dp[4][i] = Math.max(dp[4][i-1], dp[3][i-1] + prices[i]);
        }
        return dp[4][prices.length-1];
    }
}

总结

暂无

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

题目: 188. 买卖股票的最佳时机 IV
解析: 代码随想录解析

解题思路

上一个题基础上拓展一下

代码

java 复制代码
class Solution {
    public int maxProfit(int k, int[] prices) {
        int [][]dp = new int[2*k+1][prices.length];
        for (int i = 1; i <= 2*k; i+=2) {
            dp[i][0] = -prices[0];
        }
        for (int i = 1; i < prices.length; i++) {
            for (int j = 1; j <= 2*k; j+=2) {
                dp[j][i] = Math.max(dp[j][i-1], dp[j-1][i-1] - prices[i]);
                dp[j+1][i] = Math.max(dp[j+1][i-1], dp[j][i-1] + prices[i]);
            }
        }
        return dp[2*k][prices.length-1];
    }
}

总结

暂无

相关推荐
有意义2 小时前
深度拆解分割等和子集:一维DP数组与倒序遍历的本质
前端·算法·面试
xlp666hub3 小时前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
用户726876103373 小时前
解放双手的健身助手:基于 Rokid AR 眼镜的运动计时应用
算法
Wect4 小时前
LeetCode 17. 电话号码的字母组合:回溯算法入门实战
前端·算法·typescript
xlp666hub20 小时前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode
ZhengEnCi1 天前
08c. 检索算法与策略-混合检索
后端·python·算法
程序员小崔日记1 天前
大三备战考研 + 找实习:我整理了 20 道必会的时间复杂度题(建议收藏)
算法·408·计算机考研
lizhongxuan1 天前
AI小镇 - 涌现
算法·架构
AI工程架构师1 天前
通常说算力是多少 FLOPS,怎么理解,GPU和CPU为什么差异这么大
算法
祈安_1 天前
Java实现循环队列、栈实现队列、队列实现栈
java·数据结构·算法