16. 高速收费站

郭老师每周都要苦思冥想给大家出课程的测试题目,有一天他在高速路上开车发现,高速路上有很多的收费站,但每相邻的两个收费站之间的距离不太一样,有的距离长,有的距离短,所以他想找到间隔最长的两个相邻收费站之间的距离是多少。

假设每个收费站都有个正整数的编号,其表示当前的收费站距高速路起点的距离,但由于某些收费站间距离太近,所以使用了同一个编号,现在想请大家帮忙写程序计算相邻的两个收费站之间的最长距离是多少。

如某条高速路的收费站编号为 3 2 6 2 1(编号为随机顺序,并非收费站的地理位置顺序),那么收费站在高速路上出现的顺序为 1 2 2 3 6,因此我们可以得到相邻的两个收费站之间最长的距离为 3。

输入

输入的第一行 n 为一个正整数 ( 1 ≤ n ≤ 10000000),表示某条高速路收费站的数目。随后的 n 行为 n 个收费站的编号,范围为1~1000000的正整数。

输出

输出相邻的两个收费站之间的最长距离。当仅有一个收费站时,输入当前收费站编号。



测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助
测试用例 1以文本方式显示
  1. 8↵
  2. 29↵
  3. 83↵
  4. 59↵
  5. 13↵
  6. 86↵
  7. 42↵
  8. 88↵
  9. 60↵
以文本方式显示
  1. 23↵
1秒1024KB0


#include<stdio.h>

int num[1000001] = { 0 };
int main()
{
	int N, n, Max = 0, Min = 1000001, maxx = 0,j;
	scanf("%d", &N);
	for (int i = 0; i<N; i++)
	{
		scanf("%d", &n);
		if (n > Max) Max = n;
		if (n < Min) Min = n;
		num[n]++;
	}
	if (N == 1)
	{
		printf("%d\n", n);
		return 0;
	}
	for (int i = Min; i <= Max; i++)
	{
		if (num[i] > 0)
		{
			for ( j = i + 1; j <= Max; j++)
			{
				if (num[j] > 0)
				{
					if (j - i > maxx)
						maxx = j - i;
					i = j - 1;
					break;
				}
			}
				
		}
	}
	printf("%d\n", maxx);

	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值