题意是要求最大值和最小值的差值的最小值。容易想到,对于一个有序序列,最可能得到这个最小值的是删去这个序列的最大值或最小值,因为删去除最大值和最小值外的数并不会改变差值的最小值。因此,我们只需要比较一下删去最大值和最小值后得到的差值,然后挑小的那个即可。
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#define INF 0x3fffffff
#define JIN 678
#define mst(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn=1e5+5;
int arr[maxn];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>arr[i];
sort(arr,arr+n);
int ans1,ans2;
ans1=arr[n-2]-arr[0];
ans2=arr[n-1]-arr[1];
int ans=min(ans1,ans2);
cout<<ans<<endl;
return 0;
}