题目链接(- -> 点击可自行查看对应的题目)
题目要求找出包含最大值和最小值的最短连续区间,此时直接枚举即可,先把所有最大值
和最小值对应的位置(下标)找出来,放在两个数组中,做差值找出最短区间即可,但~~
竟还有两个点超时,听说是快速输入...(这也能卡~~)
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 1e7 + 5;
int n, a[N], x, y, Max[N], Min[N], k1 = 0, k2 = 0, Minn = 0x3f3f3f3f;
int SearchMax()
{
int Max = a[0];
for(int i = 1; i < n; ++i) Max = max(Max, a[i]);
return Max;
}
int SearchMin()
{
int Min = a[0];
for(int i = 1; i < n; ++i) Min = min(Min, a[i]);
return Min;
}
void MinLength()
{
x = SearchMax();
y = SearchMin();
for(int i = 0; i < n; ++i)
{
if(a[i] == x) Max[k1++] = i;
if(a[i] == y) Min[k2++] = i;
}
for(int i = 0; i < k1; ++i)
{
for(int j = 0; j < k2; ++j)
{
if(i == 0 && j == 0) Minn = abs(Max[i] - Min[j]) + 1;
else
{
Minn = min(Minn, abs(Max[i] - Min[j]) + 1);
}
}
}
}
int main()
{
scanf("%d", &n);
for(int i = 0; i < n; ++i) scanf("%d", &a[i]);
MinLength();
printf("%d\n", Minn);
return 0;
}
这个超时意义不大,不管啦!!!