原题链接:
123.买卖股票的最佳时机II
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/文章来源:https://www.toymoban.com/news/detail-828563.html
完成情况:
文章来源地址https://www.toymoban.com/news/detail-828563.html
参考代码:
_122买卖股票的最佳时机II_可以多次买入卖出01
package 代码随想录.动态规划;
public class _122买卖股票的最佳时机II_可以多次买入卖出01 {
public int maxProfit(int[] prices) {
//贪心递推过去
int len = prices.length;
if (len < 2){
return 0;
}
int res = 0;
for (int i = 1; i < len; i++){
int difference = prices[i] - prices[i - 1];
//只要能赚就进货,
//你也可以先购买,然后在 同一天 出售。
if (difference > 0){
res += difference;
}
}
return res;
}
}
_122买卖股票的最佳时机II_可以多次买入卖出02
package 代码随想录.动态规划;
public class _122买卖股票的最佳时机II_可以多次买入卖出02{
public int maxProfit(int[] prices) {
//贪心递推过去
int len = prices.length;
if (len < 2){
return 0;
}
int res = 0;
for (int i = 1; i < len; i++){
res += Math.max(prices[i] - prices[i-1],0);
}
return res;
}
}
_122买卖股票的最佳时机II_常规dp
package 代码随想录.动态规划;
public class _122买卖股票的最佳时机II_常规dp {
/**
*
* @param prices
* @return
*/
public int maxProfit(int[] prices) {
int len = prices.length;
if (len < 2){
return 0;
}
//0:持有现金
//1:持有股票
//状态转移 0-> 1-> 0 -> 1-> 0 -> 1-> 0
int dp [][] = new int[len][2];
dp[0][0] = 0;
dp[0][1] = -prices[0];
//递推数组
for (int i = 1; i < len; i++){
//给dp每一组的两个变量赋值进去
dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1] + prices[i]);
dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0] - prices[i]);
}
return dp[len - 1][0];
}
}
_122买卖股票的最佳时机II_一维dp
package 代码随想录.动态规划;
public class _122买卖股票的最佳时机II_一维dp {
/**
*
* @param prices
* @return
*/
public int maxProfit(int[] prices) {
int len = prices.length;
if(len < 2) return 0;
//cash: 现金
//hold: 持有股票
//状态数组
//状态转移:
int [] cash = new int[len];
int [] hold = new int[len];
cash[0] =0;
hold[0] = -prices[0];
for (int i = 1;i<len;i++){
//这两行调换顺序也是可以的
cash[i] = Math.max(cash[i-1],hold[i-1] + prices[i]);
hold[i] = Math.max(hold[i-1],cash[i-1] - prices[i]);
}
return cash[len- 1 ];
}
}
_122买卖股票的最佳时机II_滚动数组
package 代码随想录.动态规划;
public class _122买卖股票的最佳时机II_滚动数组 {
/**
*
* @param prices
* @return
*/
public int maxProfit(int[] prices) {
int len = prices.length;
if (len < 2) return 0;
int cash = 0;
int hold = -prices[0];
int preCash = cash;
int preHold = hold;
for (int i = 1; i < len; i++) {
cash = Math.max(preCash,preHold + prices[i]);
hold = Math.max(preHold,preCash - prices[i]);
preCash = cash;
preHold = hold;
}
return cash;
}
}
错误经验吸取
到了这里,关于123.买卖股票的最佳时机II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!