最大间隔

[编程题] 最大间隔
给定一个递增序列,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 ;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值