/*
最容易想到的方法,就是两重循环,时间复杂度n*n n的大小100,000 两重循环无能为力了
必须要高效的解法才能解决问题
对于第j个数,d[j]记录当前a[i]-a[j](其中i<j)的最大值,a[i]应该越大越好
依着这个思路,每次记录j前面的最大值a[i]就可以解决问题了
时间复杂度n
*/
#include<stdio.h>
#define N 100000+5
int a[N];
int max(int x,int y)
{
if(x>y)
return x;
return y;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int ans=a[0]-a[1];
int maxid=a[0];
for(int j=1;j<n;j++)
{
ans=max(ans,maxid-a[j]);
maxid=max(maxid,a[j]);
}
printf("%d\n",ans);
}
return 0;
}
UVa 11078 - Open Credit System
最新推荐文章于 2020-07-01 13:12:02 发布
本文介绍了一种求解数组中最大差值问题的高效算法,通过一次遍历记录当前最大值并计算最大差值,避免了传统的双层循环带来的高时间复杂度问题。
422

被折叠的 条评论
为什么被折叠?



