18770 差值最大
Description
一个长度为N的整数序列,找出两个数x和y使x-y的值最大。
要求在序列中x必须在y的右侧。
输入格式
第一行是一个正整数N,表示了序列的长度(0<=N<=200000)。
第二行包含N个绝对值不大于10000的整数ai。
输出格式
一个整数,为最大的差值。数据确保结果在类型int范围内。
输入样例
7
4 -4 3 -1 2 -4 3
输出样例
7
AC代码:
思路:(贪心)每次输入都计算,找到最小值,然后找到每个数减该数的最大值
#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n,x,mi= 100001,ma = -100000;
cin >> n;
//贪心,输入一次计算一次
for(int i = 0;i < n;i++){
cin >> x;
mi = min(mi,x);//找到最小值
ma = max(ma,x - mi);//每次减最小值,如果比之前的差最大值大,存入
}
cout << ma << endl;
return 0;
}
错误:(会超时)
#include <stdio.h>
int main()
{
int N;
scanf("%d",&N);
long long sub[N][N] = {0};
long long a[100001];
for(int i = 0;i < N;i++){
scanf("%d",&a[i]);
}
int x,y;
int s = 0;
for(int i = 0;i < N;i++){
y = a[i];
for(int j = i;j < N;j++){
x = a[j];
if(x - y > s){
s = x - y;
}
}
}
printf("%d",s);
return 0;
}