zn的游戏

题目链接(- -> 点击可自行查看对应的题目)
在这里插入图片描述

题目要求找出包含最大值和最小值的最短连续区间,此时直接枚举即可,先把所有最大值
和最小值对应的位置(下标)找出来,放在两个数组中,做差值找出最短区间即可,但~~
竟还有两个点超时,听说是快速输入...(这也能卡~~)

在这里插入图片描述

#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;
}

这个超时意义不大,不管啦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值