小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,相差最小的有多少对呢?相差最大呢?
代码
1 |
|
算法
首先进行排序
首先看差值最小的对数:
1.首先计算出最小差值是多少
2,根据这个差值来判断
2.1 如果差值为0,则是有相同的数,(比如3,3,3则有3对)不能单纯的计算相同数的个数,因为可能存在(3,3,2,2)这种情况,所以必须要遍历字符串,用1
int j来寻找每个数相同个数的对数。
2.2 如果差值不为0,则直接计算有多少对差值为最小值的对数。
对于最大值的差值:
由于是有序的,可以直接最大的值和最小的值是多少,再根据循环找出最大值和最小值的个数
1,如果最小值个数等于最大值的个数,即整个序列相等,对数为n* (n-1)/2
2,如果不相等,则对数为两个数想乘。
注意
本算法的关键有两点:
1.首先要排序,可以利用1
algorithm头文件中的sort函数直接进行排序
2.判断最小值对数的时候要慢慢来,先算出值,再算对数,要格外注意最小值为0的情况。