求最大利益的算法

该博客探讨了如何通过高效算法解决外汇交易中寻找最大收益的问题。当给定不同时间点的货币价格,原始的算法复杂度接近n的平方,但通过改进,可以找到在O(1)复杂度内计算最大收益的方法。博主提供了C++实现的代码示例,以动态维护最小价格并计算最大利润。
摘要由CSDN通过智能技术生成

题目:外汇交易可以通过兑换不国家的货币以赚取汇率差,比如1美元兑换100日元时购入1000美元,然后汇率变动到1美元兑换108美元时卖出,这时的收益是(108-100)*1000=8000日元

现在请将某货币在t时刻的价格Rt(t=0,1,2,...n-1)作为输入数据,计算出价格差Rj-Ri(其中j>i)时的最大值

输入:第1行输入整数n,接下来n行依次给整数Rt赋值

输出:在单独一行中输出最大值

限制:

2<=n<=200000

1<Rt<=1000000000

输入示例:5 1 2 4 3 5 输出:3

输入示例: 3 4 3 2      输出:-1


简单算法:

for j从1到n-1

 for i从0到j-1

 maxv(maxv 与R[j]-R[i])i较大的一个)

在这个算法中我们将所有满足j>i的i与j的组合全部列了出来,算法复杂度接近n的平方,由于n最大达到了200000,因此这个算法效率不高。


高效算法:我们要找的数就是j左侧的最小值,在j自增的过程中,将现阶段Rj的最小值保存下来,那么只需要O(1)便可以求出j时刻的最大利益,这里的O(1)表示不受输入大小影响的固定复杂度。

用c++实现的代码如下:

#include<iostream>
#include<algorithm>
using namespace

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值