由于题目中规定了i<j, 所以Ai-Aj要渠道最大值,那么Ai只有可能取A1~A(j-1)中最大的那个,从左到右遍历整个数组,维护这个最大值,计算的时间复杂度就可以降低到线性复杂度,否则用两重循环是n*n的复杂度,肯定会超时的。
#include <stdio.h>
int arr[100001];
int main(void){
int t, n, i;
int max, ans;
//freopen("input.dat", "r", stdin);
scanf("%d", &t);
while(t--){
scanf("%d", &n);
for(i=1; i<=n; i++){
scanf("%d", arr+i);
}
ans = arr[1] - arr[2];
max = arr[1];
for(i=2; i<=n-1; i++){
max = max > arr[i] ? max : arr[i];
ans = max-arr[i+1] > ans ? max-arr[i+1] : ans;
}
printf("%d\n", ans);
}
}