题目描述
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

示例 2:

输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

我的思路为:
买卖股票,最重要的是低买高卖,这道题简化了买卖股票的环节,规定了不能同时参与多笔交易,同一时刻持有的股票必须是一天内购买的股票。并且一天的股票假设是恒定不变的。
在上述前提下,我们只需要抓住每一个爬坡过程即可。

按照上述思路,代码实现如下,时间复杂度为O(n)

public int maxProfit(int[] prices) {if(prices == null || prices.length<=1) {return 0;}int buy=-1,sell=-1,amt=0;for(int i=0;i<prices.length-1;) {while(buy == -1 &&i<prices.length-1 &&prices[i]>=prices[i+1]) {i++;}if(buy == -1) {if(i ==prices.length-1) {return amt;}buy=prices[i];i++;}while(sell == -1 &&i<prices.length-1 && prices[i]<=prices[i+1]) {i++;}if(sell == -1) {sell = prices[i];if(i ==prices.length-1) {amt +=(sell-buy);return amt;}i++;}if(buy!=-1 && sell!=-1) {amt +=(sell-buy);sell=buy=-1;}}return amt;}

2019-03-09-算法-进化(买卖股票的最佳时机 II)相关推荐

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

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

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

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

  3. leetcode算法题--买卖股票的最佳时机 II

    原题链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 这类股票题目请见leetcode算法题–最佳买卖股票 ...

  4. 贪心算法之买卖股票的最佳时机 II

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

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

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

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

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

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

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

  8. JAVA刷Leecode-贪心算法-区间问题-买卖股票的最佳时机 II

    JAVA刷Leecode-贪心算法 算法思想 区间问题-买卖股票的最佳时机 II(122.,easy) 题目描述 输入输出样例 示例1 示例 2: 解题思路: 题解 解题思路:贪心算法 题解 资源学习 ...

  9. 力扣贪心算法专题(一)455.分发饼干 376. 摆动序列 53. 最大子序和 122.买卖股票的最佳时机II 1005.K次取反后最大化的数组和 思路及C++实现 贪心算法 动态规划

    文章目录 贪心算法 455.分发饼干 思路 步骤 代码 376. 摆动序列 贪心算法 思路 分析 代码 动态规划 思路 步骤 代码 53. 最大子序和 暴力解法 双层for循环 贪心算法 思路 分析 ...

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

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

最新文章

  1. (传送门) IDEA 控制台输出JVM的GC日志
  2. 中部四省会打造人才信息云平台
  3. 基于Spring Cloud实现微服务前后端系统
  4. 让Visual Studio 2005 Team Foundation Server支持Wss3
  5. js 一/二维数组排序
  6. linux 使用碎碎记
  7. javascript 忽略 报错_.babelrc ignore忽略js无效
  8. [转载]在instagram上面如何利用电脑来上传图片
  9. 利用xposed自动获得微信个人收款二维码链接和收款记录
  10. linux mbr转gpt分区,免重装!迄今为止最详细的MBR转GPT分区攻略
  11. 安装python3.8出现ModuleNotFoundError: No module named ‘_ctypes’解决办法
  12. centos7密码破解
  13. debian系统简单介绍
  14. 产生式系统Python PySide2的GUI界面
  15. テクニカルアーティストに必要な資料集めようぜ!
  16. 在微信朋友圈常见的H5要如何制作?
  17. 攻防世界-web NewsCenter3
  18. IT项目管理小组分工情况
  19. 腐蚀rust电脑分辨率调多少_腐蚀RUST怎么提高游戏画质_提高游戏画质方法介绍
  20. mysql mmm切换_Mysql-MMM slave无法切换change master的解决方案

热门文章

  1. 分布式和微服务区别_深度解析spring cloud分布式微服务的实现
  2. js 月份加6个月_美国切削工具6月份订单较上月增加10.1
  3. 身家4400亿美元的他,吃低于3美元的早餐,和2个老婆同居28年!
  4. 魔方内部长啥样?三维动画展示其结构,谁发明的真是个天才
  5. 人生133个规则,能领悟多少算多少!!!看自己的造化!!!
  6. oracle中文加密算法,Oracle数据库替代加密算法
  7. 表达式如何获取复选框的值_Nuke表达式 Expression节点讲解
  8. python中summary_python summary_study.py
  9. java emoji编码转换_java转换emoji表情
  10. 加密封装 怎么把_不要再封装各种Util工具类了,这个神级框架值得拥有!