题意:如标题所示,给一个数组让你输出a[i]-a[j]的最大值,
其中i < j表示a[i]在a[j]前面。
思路:常规解法就是通过两层for循环找每一次a[i]和i后面的a[j]之间的差值,最后输出即可。但是数据量在1万以上,所以O(n^2)的时间复杂度是不够的。
此时就要进行思维的转化:其实我们要求的就是j之前最大的ai,这样用maxi和当前的a[j]做差就是当前的答案了。扫的过程中不断更新最大差值和当前maxi的值,所以扫一遍就得出结果。
代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
int a[10010],n,ans,maxi;
inline int maxer(int a,int b){
return a>b?a:b;}