摘要: 【问题】给定两个长度都为N的有序数组X和Y,写一个函数来找到X和Y合并后的数组的中位数。【解答】:首先明确一点,因为X和Y长度一样,所以中位数肯定是有两个的,左中位数和右中位数。现在我们的思路是,要不断缩小两个数组的长度,同时保证那两个中位数总是在两个数组中,当两个数组的长度足够小的时候,我们就可以轻易找到答案了。为了方便叙述,我们假定我们可以对数组的每个元素染色,染成黑色或者白色。假设左右中位数分别为a,b。那么,我们把X和Y中所有小于等于左中位数的数都染成白色,把所有大于等于右中位数的数染成黑色。由于X和Y是有序的,所以X和Y它们的颜色都必定是一串白接着一串黑,而且X里的白色数的个数等于Y 阅读全文
posted @ 2012-05-27 22:02 Jack204 阅读(2874) 评论(0) 推荐(0) 编辑
摘要: 背景:同室四人各写一张贺卡,先集中起来,然后每人从中拿一张别人送出的贺卡,四张贺卡的不同分配方式有多少种?问题:错排问题:有n个正整数1,2,3,……n,将这n个正整数重新排列,使其中的每一个数都不在原来的位置上,这种排列称为正整数1,2,3,……n的错排,问这n个正整数的排列方法有多少种?递推公式f(n)=(n-1)[f(n-1)+f(n-2)](n>2),f(1)=0,f(2)=1.(欧拉发现)将n个元素的全错位排列分成2步完成:第一步,对于n中的任意一个元素(如1)有n-1种(其它的2,3,4…n)选择。第二步,假设元素1选择了位置k,那么接下来排k,又将k的排法分成两类:第一类, 阅读全文
posted @ 2012-05-27 20:41 Jack204 阅读(451) 评论(0) 推荐(0) 编辑