思路

本题和121. 买卖股票的最佳时机的唯一区别本题股票可以买卖多次了(注意只有一只股票,所以再次购买前要出售掉之前的股票)

这里重申一下dp数组的含义:

dp[i][0] 表示第i天持有股票所得现金。
dp[i][1] 表示第i天不持有股票所得最多现金

如果第i天持有股票即dp[i][0], 那么可以由两个状态推出来

第i-1天就持有股票,那么就保持现状,所得现金就是昨天持有股票的所得现金 即:dp[i - 1][0]
第i天买入股票,所得现金就是昨天不持有股票的所得现金减去 今天的股票价格 即:dp[i - 1][1] - prices[i]

注意这里和121. 买卖股票的最佳时机唯一不同的地方,就是推导dp[i][0]的时候,第i天买入股票的情况。

在121. 买卖股票的最佳时机中,因为股票全程只能买卖一次,所以如果买入股票,那么第i天持有股票即dp[i][0]一定就是 -prices[i]。

而本题,因为一只股票可以买卖多次,所以当第i天买入股票的时候,所持有的现金可能有之前买卖过的利润。

那么第i天持有股票即dp[i][0],如果是第i天买入股票,所得现金就是昨天不持有股票的所得现金 减去 今天的股票价格 即:dp[i - 1][1] - prices[i]

在来看看如果第i天不持有股票即dp[i][1]的情况, 依然可以由两个状态推出来

第i-1天就不持有股票,那么就保持现状,所得现金就是昨天不持有股票的所得现金 即:dp[i - 1][1]
第i天卖出股票,所得现金就是按照今天股票佳价格卖出后所得现金即:prices[i] + dp[i - 1][0]

class Solution {public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(2));dp[0][0]=-prices[0];dp[0][1]=0;for(int ii=1;ii<prices.size();ii++){dp[ii][0]=max(dp[ii-1][0],dp[ii-1][1]-prices[ii]);//dp[ii][1]=max(dp[ii-1][1],dp[ii-1][0]+prices[ii]);}return max(dp[prices.size()-1][0],dp[prices.size()-1][1]);}
};
时间复杂度:O(n)
空间复杂度:O(n)

买卖股票的最佳时机II相关推荐

  1. 力扣 买卖股票的最佳时机II

    力扣 买卖股票的最佳时机II 题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注 ...

  2. 2、买卖股票的最佳时机 II

    2.买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能 ...

  3. 力扣刷题day42|121买卖股票的最佳时机、122买卖股票的最佳时机II

    文章目录 121. 买卖股票的最佳时机 贪心思路 动态规划思路 动态规划五部曲 122. 买卖股票的最佳时机II 贪心思路 动态规划思路 动态规划五部曲 121. 买卖股票的最佳时机 力扣题目链接 给 ...

  4. 122. 买卖股票的最佳时机 II

    121. 买卖股票的最佳时机 122. 买卖股票的最佳时机 II 123. 买卖股票的最佳时机 III 188. 买卖股票的最佳时机 IV 309. 最佳买卖股票时机含冷冻期 714. 买卖股票的最佳 ...

  5. 算法训练Day49 | Leetcode121. 买卖股票的最佳时机(只能买卖一次);LeetCode122. 买卖股票的最佳时机II(可以买卖多次)

    目录 Leetcode121. 买卖股票的最佳时机 方法一:暴力解法 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考与收获 方法二:贪心算法 1. 思路 2. 代码实现 3. 复杂度分析 方 ...

  6. JavaScript买卖股票的最佳时机 II

    买卖股票的最佳时机 II 前言 1.什么是贪心算法 2.LeetCode题目 3.解法 4.代码实现 总结 前言 1.什么是贪心算法 贪心法,又称贪心算法,贪婪算法,在对问题求解时,总是做出在当前看来 ...

  7. LintCode领扣算法问题答案:150. 买卖股票的最佳时机 II

    150. 买卖股票的最佳时机 II 描述 给定一个数组 prices 表示一支股票每天的价格. 你可以完成任意次数的交易, 不过你不能同时参与多个交易 (也就是说, 如果你已经持有这支股票, 在再次购 ...

  8. _42LeetCode代码随想录算法训练营第四十二天-动态规划 | 121.买卖股票的最佳时机、122.买卖股票的最佳时机II

    _42LeetCode代码随想录算法训练营第四十二天-动态规划 | 121.买卖股票的最佳时机.122.买卖股票的最佳时机II 题目列表 121.买卖股票的最佳时机 122.买卖股票的最佳时机II 1 ...

  9. _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II 、55.跳跃游戏、45.跳跃游戏II

    _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II .55.跳跃游戏.45.跳跃游戏II 题目列表 122.买卖股票的最佳时机II 55.跳跃游戏 45 ...

  10. 代码随想录算法训练营第三十二天_第八章_贪心算法 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

    LeetCode 122.买卖股票的最佳时机II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票 ...

最新文章

  1. element upload预览_vue+element上传图片并显示预览图
  2. (转)jQuery第五课:Ajax
  3. #地形剖面图_高中地理——每日讲1题(地形剖面图)
  4. Android 8.0 adb分析
  5. 使用 Boost.Lambda 库创建并存储在 Boost.Function 对象中的函子中使用 Boost.Units 的数量、单位和绝对类型
  6. Android 简单实现订单模块类APP的物流详情页
  7. 使用React和Tailwind CSS搭建项目模板
  8. MySQL命令行导出数据库
  9. iOS应用如何支持IPV6
  10. 经典面试题(16):以下代码将输出的结果是什么?
  11. 解决dom4j java.lang.NoClassDefFoundError: org/jaxen/JaxenException
  12. 面试基础(1)——面向对象/get,post的区别
  13. 介绍目前计算机网络的新技术,当前计算机网络技术实验室建设现状及方向
  14. windows10 下使用Pycharm2016 基于Anaconda3 Python3.6 安装Mysql驱动总结
  15. (实用软件分享)屏幕取色器ColorPix
  16. java jar包存放位置_获得运行jar包存放路径的方法
  17. H5本地存储 localStorage和sessionStorage区别 存储方式 用法
  18. 【python之旅】python简介和入门
  19. 高质量程序设计指南C++/C试题
  20. 百度地图获取行政区划边界

热门文章

  1. [转]php-fpm配置具体解释
  2. java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
  3. css 两边宽度固定中间自适应宽度
  4. 验证码广告:站长增加收入新渠道
  5. QTP简单框架(6)之脚本编写实例
  6. HarmonyOS之数据管理·分布式文件服务的应用
  7. HarmonyOS之搭建和配置开发环境的流程
  8. 【数据结构与算法】之连通网络的操作次数的算法
  9. 4. Median of Two Sorted Arrays
  10. 【STM32】中断优先级管理