题目
小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?
输入描述:
输入包含多组测试数据。
对于每组测试数据:
N - 本组测试数据有n个数
a1,a2...an - 需要计算的数据
保证:
1<=N<=100000,0<=ai<=INT_MAX.
输出描述:
对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。
示例1
输入
6
45 12 45 32 5 6
输出
1 2
思路
该题考察看似简单,实际坑很深。首先吐槽下题目,上厕所也要考虑这么多吗?不过真的是个好题,这就是腾讯崇尚的价值观?害怕。。。。。
求最大值比较容易,对数组排序后,队尾减去队首就是最大差值。需要考虑队首和队尾存在重复数的情况,也就是要分别找数组中最大数和最小数的个数 Nmax N m a x 和 Nmin N m i n ,最大差值对数就等于 Nm