网站建设方案范文网站建设详细报价
news/
2025/10/7 8:48:07/
文章来源:
网站建设方案范文,网站建设详细报价,景德镇seo,邢台网站建设哪家公司好继续炒股。第一题是买卖股票的最佳时机IIIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/description/#xff0c;与上题不同的是#xff0c;本题要求买卖的次数要限制在2次以内。对上题的dp数组#xff0c;显然要增加它的状态以适应题目要求。对于遍历…继续炒股。第一题是买卖股票的最佳时机IIIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/description/与上题不同的是本题要求买卖的次数要限制在2次以内。对上题的dp数组显然要增加它的状态以适应题目要求。对于遍历的每一天一共的状态数有5种第一次持有股票第一次不持有股票第二次持有股票第二次不持有股票对应的状态j为1、2、3、4。dp[i][j] 为第i天状态为j是获得的最大利润。j 1时第一次持有股票可能第i天刚刚买入dp[i][1] - prices[i]也可能延续了第i-1天的持有状态dp[i][1] dp[i - 1][1]。综上dp[i ][1] max(dp[i - 1 ][1], - prices[i]。j2时第一次不持有股票可能第i天刚刚卖出dp[i][2] dp[ i - 1 ][1] prices[i]也可能延续了第i-1天的不持有状态dp[i][2] dp[ i - 1 ][2]。dp[i][2] max(dp[ i - 1 ][1] prices[i], dp[i - 1][2])。同理可以分析出dp[i][3] max(dp[ i - 1][3], dp[i - 1][2] - prices[i])dp[i][4] max(dp[i - 1][4], dp[i - 1][3] prices[i])。dp[0][1]对应着第一天买入的操作dp[0][1] - prices[0]。dp[0][2]对应第一天买入又卖出的情况dp[0][2] 0。dp[0][3] 对应二次买入的操作dp[0][3] dp[0][1]。dp[0][4]对应二次买入卖出的情况dp[0][4] dp[0][2]。从前向后遍历dp数组最后返回dp[prices.size() - 1][4]。
class Solution {
public:int maxProfit(vectorint prices) {if (prices.size() 0) return 0;vectorvectorint dp(prices.size(), vectorint (5, 0));dp[0][1] -prices[0];dp[0][3] -prices[0];for (int i 1; i prices.size(); i){dp[i][1] max(dp[i - 1][1], -prices[i]);dp[i][2] max(dp[i - 1][2], dp[i - 1][1] prices[i]);dp[i][3] max(dp[i - 1][3], dp[i - 1][2] - prices[i]);dp[i][4] max(dp[i - 1][4], dp[i - 1][3] prices[i]);}return dp[prices.size() - 1][4];}
};
第二题是买卖股票的最佳时机IVhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/本题是上一题的抽象化当买卖k次时对应遍历的每一天都有2k种状态对应着第一次持有/不持有直到第k次持有/不持有。建立一个大小为prices.size() * 2k1大小的二维dp数组递推公式dp[i][j1] max(dp[i-1][j1] , dp[i-1][j] - prices[i])dp[i][j2] max(dp[i-1][j2], dp[i - 1][j 1] prices[i])。将奇数下标的dp值初始化为-prices[i]。从前向后遍历dp数组。
class Solution {
public:int maxProfit(int k, vectorint prices) {if (prices.size() 0) return 0;vectorvectorint dp(prices.size(), vectorint (2*k1, 0));for (int i 1; i 2*k; i 2){dp[0][i] -prices[0];}for (int i 1; i prices.size(); i){for (int j 0; j 2*k - 1; j 2){dp[i][j 1] max(dp[i - 1][j 1], dp[i - 1][j] - prices[i]);dp[i][j 2] max(dp[i - 1][j 2], dp[i - 1][j 1] prices[i]);}}return dp[prices.size() - 1][2*k];}
};
还有十天通关加油
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930221.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!