为什么是 n(n+1)/2 ?
n(n+1)/2是一个数列的元素两两运算后的不重复结果数。如图:

假如数列a = 1,2,3....n。那么该数列内的元素两两相乘,则会构建出上图中的表格,这个表格应该有n x n 个元素。
用程序写出来大概就是这样:
for (int i=; i<n; i++){
for (int j=; j<n; j++){
table[i][j] = a[i]*a[j];
}
}
这段程序准确的描述了我们手工填表的过程,填满整个表一共执行了n*n次操作,产生了一个n*n的结果集,当然也包含大量重复元素。
那么到底有多少重复元素呢? 其实可以通过跟踪整个运算流程来观察出其中的规律。
1.当i=1时, a1 * a1, a1*a2.....a1*an 一切正常。
2.当i=2时, a2 * a1, a2*a2.....a2*an 看到第一项了么,在第一步时已经计算过一次了。
3.当i=3时,a3 * a1, a3*a2, a3* a3....a3*an 第一项在i=1时计算过,第二项在i=2时计算过。
依次类推,可以发现,当i=n的时候,除了an * an 需要计算以外,其他项全都已经计算过了。
现在让我们来一次时光倒流:从i=n的时候开始,他只有最后一次计算是不重复的(an*an),其余n-1次运算都是"徒劳",所以它产生了n-1个重复元素。
然后是i=n-1的时候,他只有最后两次运算是不重复的(an-1 * an-1, an-1 * an),余下的n-2个计算结果都是重复的。
一直进行到当i=2的时候,也就是上面描述的第二步,当第一个重复数出现的时候。
然后就可以把他们都加起来,他们的和就是所有重复数了:r = 1+2+...+n-1
1 + 2 + ... + n-1 =r
2 n-1 + n-2 + ... + 1 =r
将1式和2式相加=> 2r = n(n-1) => r = n(n-1)/2
得到了重复数r,那么剩下多少不重复的呢? n*n - r = n(n+1)/2 wala~ QED
----Note---
这其实是一个可重复的N choose M 组合问题,而这里的M是2,有时间的话想好好证明一下这个问题
随机推荐
- time()函数,dirname(__FILE__) 的使用总结
time()函数将返回从1970-1-1 0:0:0到当前时间的秒数.(整型) dirname(__FILE__) php中定义了一个很有用的常数,即 __file__ 这个内定常数是当前php程序的 ...
- 【GoLang】golang中 channel 实现同步 与mutex/atomic 实现同步的讨论
参考资料: https://groups.google.com/forum/#!topic/golang-china/q4pFH-AGnfs
- Innodb 表空间卸载、迁移、装载
从MySQL的Innodb特性中我们知道,Inndob的表空间有共享和独享的特点,如果是共享的.则默认会把表空间存放在一个文件中(ibdata1),当开启独享表空间参数Innodb_file_per_ ...
- cookie相关内容
----客户端删除cookie <script type="text/javascript"> function DelC ...
- ABAP 内表的行列转换-NEW
REPORT Z_TEST_COL_TO_ROW. TYPE-POOLS: slis. TABLES: mseg,mkpf. DATA: gd_fieldcat TYPE slis_t_fieldca ...
- IE的if条件Hack(兼容性)
1. 〈!--[if !IE]〉〈!--〉 除IE外都可识别 〈!--〈![endif]--〉 2. 〈!--[if IE]〉 所有的IE可识别〈![endif]--〉 3. 〈!--[if IE 5 ...
- 仿知乎程序 fragment的切换以及toolbar在不同页面下显示的menu不同
我们在看知乎的时候,你会发现,首页,发现,关注,收藏,草稿这五项,你在点击之后进入到相应页面之后,侧滑菜单还在,你左侧滑一下,这个侧滑菜单还在,而提问,左滑屏幕,这个页面就没有,有点像返 ...
- LeetCode 263 Ugly Number
Problem: Write a program to check whether a given number is an ugly number. Ugly numbers are positiv ...
- HDU 4314 Save the dwarfs (DP) ---转载
题目:传送门. 这个是DP,比赛的时候用贪心写了好久没写出来. 题意: 有n个矮人被困在深度为h的井中,每个矮人都ai(脚到肩膀的高度)和bi(手臂长度), 当存在a1 + a2 + ... + ak ...
- LightOJ 1234 Harmonic Number
D - Harmonic Number Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu S ...