小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?
输入例子:
6
45 12 45 32 5 6
输出例子:
1 2
思路:先排序,分一般情况和特殊情况,
特殊情况数组所有元素相同,差最小最大的组合个数都是C(n,2)
否则,差最大的组合个数 = 最小值个数MinNum * 最大值个数MaxNum
接下来求 ,差最小(minVal )的组合个数,
(1)若最小差为0,那么统计不同的重复元素的个数,我这里写的roo是后面出现相同元素的个数,所以roo=1的意思是后续数组只有1个与当前值相同的元素,就是C(2,2),通用公式是C(roo+1,2)
(2)最小差不为0,那么用 map 统计后续数组与当前值能构成最小差的元素的个数roo,直接加
//O(n+nlogn)
#include <iostream>
#include <cstdio>