DAY52
123买卖股票的最佳时机iii
主要是想不到:每天有5个状态(无操作,第一次持有股票、第一次不持有股票、第二次持有股票、第二次不持有股票)
- class Solution {
- public:
- int maxProfit(vector<int>& prices) {
- vector<int> dp(5,0);
- dp[1]=-prices[0];
- dp[3]=-prices[0];
- for(int i=0;i<prices.size();i++){
- dp[1]=max(dp[1],dp[0]-prices[i]);
- dp[2]=max(dp[2],dp[1]+prices[i]);
- dp[3]=max(dp[3],dp[2]-prices[i]);
- dp[4]=max(dp[4],dp[3]+prices[i]);
- }
- return dp[4];
- }
- };
188买卖股票的最佳时机iv
别忘了初始化
初始化错了,应该是price[0] 而不是price[i],为什么呢:因为它是在第一天,用的第一天来初始化。
- class Solution {
- public:
- int maxProfit(int k, vector<int>& prices) {
- vector<int> dp(2 * k + 1, 0);
- // 别忘了初始化:
- for (int j = 1; j < 2 * k; j += 2) {
- dp[j] = -prices[0];
- }
- //初始化错了,应该是price[0],为什么呢:因为它是在第一天,用的第一天来初始化。
- /* 错误:
- for (int i = 1; i < 2 * k; i += 2) {
- if (i % 2 != 0)
- dp[i] = -1 * prices[i];
- }
- */
- for (int i = 0; i < prices.size(); i++) {
- for (int j = 1; j <= 2 * k; j++) {
- if (j % 2 != 0)
- dp[j] = max(dp[j], dp[j - 1] - prices[i]);
- else
- dp[j] = max(dp[j], dp[j - 1] + prices[i]);
- }
- }
- return dp[2 * k];
- }
- };