js 买卖股票的最佳时机 II

本文探讨了两种股票交易策略:贪心策略通过局部最优选择达到全局收益最大化,以及动态规划法,通过状态转移计算买入和卖出的最佳时机。实例代码展示了如何在Python中应用这两种方法来解决投资问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:贪心策略(局部最优达到全局最优)
解题思路:
第i天买入,第j天卖出和第i天买入,第i+P天卖出所得的收益是一样的。例如:[1,2,3,4,5],最大收益是4,如果第一天买入,第二天卖出,同时再买入,第三天又卖出…和第一天买入,第五天卖出所得收益是一样的。这就是贪心策略,一局部最优达到全局最优
代码如下:

var maxProfit = function (prices) {
  if (prices === null || prices.length === 0 ) return 0 // 没有收益
  let point = 0 
  for (let i = 1; i < prices.length; i++) {
    if (prices[i] > prices[i - 1]) {
      point += prices[i] - prices[i - 1]
    }
  }
  return point
}

方法二:动态规划法
解题思路:
1、第i天有两种操作:
卖出:前一天买入后,如果今天卖出能获得利润,就卖出,否者保持不变
买入:前一天卖出后,今天可按照prices[i]的价格买入,但买入之后的利润减少,就不买了
2、交换状态(Math.max() 一组数字内取最大值)
卖出:sell = Math.max(sell, buy + prices[i]);
买入:buy = Math.max(buy, lastSell - prices[i]);

 var maxProfit = function (prices) {
  if (prices === null || prices.length === 0 ) return 0 // 没有收益
  let sell = 0 // 卖出的最大利润,第一次没有卖出,利润为0
  let buy = -prices[0] // 买入的最大利润,第一次买入,所以为负数
  for (let i = 1; i < prices.length; i++) {
    const lasterSell = sell // 每次保存卖出的利润
    sell = Math.max( // 取两者最大值为本次操作卖出的总利润
      sell, // 如果上一次为卖出,这次没有股票可卖
      buy + prices[i]  // 如果上一次为买入,卖出利润为上一次的卖出利润加当前数字
    )
    buy = Math.max(
      buy, // 如果上一次为买入,这次没有股票可买
      lasterSell - prices[i] // 如果上一次为卖出,买入的利润 = 卖出的利润 - 当前数字
    )
  }
  return Math.max(sell, buy)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值