博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Best Time to Buy and Sell Stock II 多次买卖股票的最佳时机
阅读量:4108 次
发布时间:2019-05-25

本文共 1316 字,大约阅读时间需要 4 分钟。

题目:

给出一组股票的价格,prices[i]代表第i天的股票价格,你能做多次买卖操作,但同时只能拥有一只股票,求出买卖股票的最大利润。

解答:

每次在谷底买入,在谷峰卖出,就可以获得最大利润。

先找出谷底,数组下标标记为买入buy, 同时sell = buy, 然后找出谷峰,标记为sell, 相减得出一次买卖的利润,重复直到数组结束。

代码:

class Solution {  public:	  int maxProfit(vector
&prices) { int size = prices.size(); if (size == 0) return 0; int buy = 0; int sell = 0; int i = 1; int sum = 0; while(i < size) { while (i < size && prices[i - 1] > prices[i]) ++i; if (i == size) //到达数组尾部,结束 break; else { buy = i - 1; //股票买入点 } sell = buy; //先令卖出点==买入点 while (i < size && prices[i - 1] <= prices[i]) //必须是<= 否则无法继续遍历。 ++i; sell = i - 1; //股票卖出点 sum += prices[sell] - prices[buy]; } return sum; } };

还有一个更简洁的代码:

http://jiyuede.blog.163.com/blog/static/3325192120121180646993/

题意:买卖股票的第二题。与1的变化在于可以买卖任意次数,但必须保证买卖一次后才能进行第二次。

分析:实际上是求波浪线的所有上升段的长度和。
class Solution {public:    int maxProfit(vector
&prices) { // Start typing your C/C++ solution below // DO NOT write int main() function int result = 0; int i = 0; int len = prices.size(); if(len<2) return 0; for(i=1;i
prices[i-1]) { result += prices[i]-prices[i-1]; } } return result; }};

转载地址:http://sytsi.baihongyu.com/

你可能感兴趣的文章
【原创】modelsim图像仿真笔记整理
查看>>
WEB网页插件 如何实现 选择上传图片路径 【高级问题】
查看>>
介绍 github
查看>>
【题解】Luogu P2766 最长不下降子序列问题
查看>>
Treap学习总结
查看>>
HTTP——学习笔记(1)
查看>>
在采用vue-cli Post Get
查看>>
git 提交oschina
查看>>
网络编程——TCP协议的三次握手和四次挥手
查看>>
制作根文件系统的经验
查看>>
最小二乘法(ZZ)
查看>>
爬虫-Beautiful Soup模块
查看>>
多路访问网络中的挑战
查看>>
etcd:从应用场景到实现原理的全方位解读
查看>>
mysql-mode问题
查看>>
Android service里面启动activity和alertdialog .
查看>>
PHPExcel读取excel文件示例
查看>>
常见浏览器的兼容问题
查看>>
iOS开发经验总结
查看>>
Java重定向标准输入/输出
查看>>