本文最后更新于 188 天前,其中的信息可能已经有所发展或是发生改变。
问题描述
小蓝是机甲战队的队长,他手下共有 nn 名队员,每名队员都有一个战斗力值 wiwi。现在他需要将这 nn 名队友分成两组 aa 和 bb,分组必须满足以下条件:
- 每个队友都属于 aa 组或 bb 组。
- aa 组和 bb 组都不为空。
- 战斗力差距最小。
战斗力差距的计算公式为 ∣max(a)−min(b)∣∣max(a)−min(b)∣,其中 max(a)max(a) 表示 aa 组中战斗力最大的,min(b)min(b) 表示 bb 组中战斗力最小的。
请你计算出可以得到的最小战斗力差距。
输入格式
第一行一个整数 nn,表示队员个数。
第二行 nn 个整数 w1,w2,w3….wnw1,w2,w3….wn,分别表示每名队友的战斗力值。
数据范围保证:2≤n≤1052≤n≤105,1≤wi≤1091≤wi≤109。
输出格式
输出一个整数,表示可以得到的最小战斗力差距。
样例输入
3 1 2 3
样例输出
1
说明
样例中,当 a=[1,3]a=[1,3],b=[2]b=[2],此时战斗力差距为 11,无法得到比 11 更小的安排方式。
运行限制
语言 | 最大运行时间 | 最大运行内存 |
---|---|---|
C++ | 2s | 256M |
C | 2s | 256M |
Java | 3s | 256M |
Python3 | 4s | 256M |
答案解析
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;cin>>n;
long long q[n],mi = 1e6;
for(int i = 0;i<n;i++)cin>>q[i];
sort(q,q+n);
for(int i = 0;i<n-1;i++){
mi = min(q[i+1]-q[i],mi);
}
cout<<mi<<endl;
// 请在此输入您的代码
return 0;
}