Content
有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),现在需要从这些数中删除一个数,使得 \(\max\limits_{i=1}^na_i-\min\limits_{i=1}^na_i\) 的值最小。
数据范围:\(2\leqslant n\leqslant 10^5,1\leqslant a_i\leqslant 10^5\)。
Solution
先给这些数排个序,设最大数为 \(a_{\max}\),第二大数为 \(a'_{\max}\),第二小数为 \(a'_{\min}\),最小数为 \(a_{\min}\)。那么由于只能够删一个数,答案就是 \(\max\{a'_{\max}-a_{\min},a_{\max}-a'_{\min}\}\)。
Code
int n, a[100007];
int main() {
getint(n);
_for(i, 1, n) getint(a[i]);
sort(a + 1, a + n + 1);
int ans = min(a[n] - a[2], a[n - 1] - a[1]);
writeint(ans);
return 0;
}