[编程题] 最大间隔
给定一个递增序列,a
1 <a
2 <...<a
n 。定义这个序列的最大间隔为d=max{a
i+1 - a
i }(1≤i<n),现在要从a
2 ,a
3 ..a
n-1 中删除一个元素。问剩余序列的最大间隔最小是多少?
输入描述:
第一行,一个正整数n(1<=n<=100),序列长度;接下来n个小于1000的正整数,表示一个递增序列。
输出描述:
输出答案。
输入例子:
5 1 2 3 7 8
输出例子:
4
解题思路:
1.先计算原始数组相邻间隔,并在计算的过程中记录最大相邻间隔maxFull。
2.删除ai(1≤i<n)后所得新数组的最大相邻间隔只会在a[i+1]-a[i-1]与maxFull中取值,也就是Math.max(arr[i+1]-arr[i-1], maxFull)。
3.记录每一次删除ai(1≤i<n)后所得最大相邻间隔的最小值。
#include <vector>
#include <iostream>
using namespace::std ;
int main() {
int input ;
while ( cin >> input ) {
int dmax = 0 ;
int dmin = 999 ;
vector<int> vec( input + 1, 0 ) ;
for ( int i = 1; i <= input; ++ i ) {
cin >> vec[i] ;
dmax = max( dmax, vec[i] - vec[i - 1] ) ;
if ( i > 1 ) {
dmin = min( dmin, vec[i] - vec[i - 2] ) ;
}
}
int result = dmin > dmax ? dmin : dmax ;
cout << result << endl ;
}
return 0 ;
}
第二次做,一杆过~~
#include <iostream>
#include <vector>
#include <algorithm>
using namespace::std ;
int main() {
int input ;
while ( cin >> input ) {
vector<int> vec ;
for ( int i = 0; i < input; ++ i) {
int tmp ;
cin >> tmp ;
vec.push_back( tmp ) ;
}
int maxv = 0 ;
int minv = 9999 ;
for ( int i = 0; i < input - 1; ++ i ) {
maxv = max( maxv, vec[i + 1] - vec[i] ) ;
}
for ( int i = 1; i < input - 1; ++ i ) {
minv = min( minv, vec[i + 1] - vec[i - 1] ) ;
}
int result = maxv > minv ? maxv : minv ;
cout << result << endl ;
}
return 0 ;
}