题目描述
给定一个序列 a 1 ≤a2 ≤⋯≤an 。其中 a 1 ≤a2 ≤⋯≤an 。
相邻两个数之间的差(后一个数减前一个数)称为它们的间隙。
请问序列中最大的间隙值是多少?
输入描述
输入的第一行包含一个整数 n,表示序列的长度。
第二行包含 n 个正整数,为给定的序列。
其中,1≤n≤1000,1≤ai≤10^5
。
输出描述
输出一个整数,表示序列中最大的间隙值。
输入输出样例
示例 1
输入
5
1 3 8 9 12
输出
5
运行限制
最大运行时间:1s
最大运行内存: 128M
所需变量
int max = 0;//初始化max为0
int arr[2] = {0};//利用一个下标仅有2的数组存储
int n;//代表共有n个数
int i;//循环变量
思路:我们每次求得都是两个数之间的差距,那么我们考虑是否能将这两个数只存放在一个2个空间大小的一维数组arr中,比如我们来了第一个数,我们就放在arr[0],第二个数放在arr[1],第三个数放在arr[0],以此类推下去,这样我们就不需要定义一个n长的一维数组,部分实现代码如下:
for(i = 0;icin>>arr[i%2];
}
知道每次如何存储之后,我们就想着判断两个数之间的差值,如果这个差值大于目前我所存储的max,那么我就用这个差值取替换max,将max修改为当前最大,直至循环结束,我们就能得到最大的间隙
if(i%2){if((arr[i%2] - arr[0])>max){max = arr[i%2] - arr[0];}
}else{if((arr[i%2] - arr[1])>max){max = arr[i%2] - arr[1];}
}
将上面两个理解后,整合一下就能得到下面的答案,代码如下(编译器是dv,语言是C语言):
#include
using namespace std;
int main()
{int max = 0,arr[2] = {0},n,i;cin>>n;for(i = 0;icin>>arr[i%2];if(i%2){if((arr[i%2] - arr[0])>max){max = arr[i%2] - arr[0];}}else{if((arr[i%2] - arr[1])>max){max = arr[i%2] - arr[1];}}}cout<