题目:外汇交易可以通过兑换不国家的货币以赚取汇率差,比如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