博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
股票收益最大问题
阅读量:4359 次
发布时间:2019-06-07

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

题目:

给定数组n, 包含n天股票的价格price,
一个人一共最多可以买2手股票,但在第一手股票卖出去前不能买入第二手股票.
如果不买,收益为0.
假设每手只买1股,计算这个人最大收益.

答案:

#include 
#include
// 计算[first,last)之间的最大子序列和,并将每一步保存在result中template
void MaxSubArray(Iterator first, Iterator last, std::vector
&result){ T max = 0; T sum = 0; for(;first!=last;first++){ if(sum<0){ sum = 0; } sum += *first; max = max>sum?max:sum; result.push_back(max); }}// 计算最大收益int MaxProfit(const std::vector
&prices){ if(prices.size()<2){ return 0; } // prices数组转换为涨跌幅数组 std::vector
v; for(int i=1;i
left; left.push_back(0); MaxSubArray(v.begin(),v.end(),left); // 从右到左计算每个最大子序列和 std::vector
right; right.push_back(0); MaxSubArray(v.rbegin(),v.rend(),right); // 将数组分为左右两部分,左右相加求最大值 int max = 0; auto iterLeft = left.begin(); auto iterRight = right.rbegin(); for(;iterLeft != left.end(); iterLeft++, iterRight++){ int tmp = *iterLeft + *iterRight; max = max>tmp?max:tmp; } return max;}int main(){ std::vector
prices = {3,8,5,1,7,8}; int result = MaxProfit(prices); std::cout<
<

转载于:https://www.cnblogs.com/walkinginthesun/p/10147191.html

你可能感兴趣的文章
你真的了解HTML吗
查看>>
【安富莱二代示波器教程】第18章 附件C---波形拟合
查看>>
将博客搬至CSDN
查看>>
英文字母的换行问题
查看>>
[有明信息]重视测算,精校成本源头 ——浅谈房地产开发目标成本测算
查看>>
【巧用百度地图】—百度地图生成器(直接获取代码)
查看>>
linux 正则表达式 元字符
查看>>
BZOJ2154 Crash的数字表格 【莫比乌斯反演】
查看>>
Kafka/Zookeeper集群的实现(二)
查看>>
每天记命令:lscpu 和 cat /proc/cpuinfo
查看>>
160个crackme 004 ajj.1
查看>>
Linux Bash代码 利用for循环实现命令的多次执行
查看>>
Ansible优化
查看>>
洛谷P1395 会议 题解
查看>>
Hibernate学习笔记(一)
查看>>
bzoj1975: [Sdoi2010]魔法猪学院
查看>>
单元测试
查看>>
java8-1 final
查看>>
三次握手和四次挥手
查看>>
Flask框架入门(一)
查看>>