基数排序
摘要:【基数排序】 参考:http://www.cnblogs.com/Braveliu/archive/2013/01/21/2870201.html
阅读全文
Varint 数值压缩
摘要:【Varint 数值压缩】 Varint 是一种紧凑的表示数字的方法。它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数。这能减少用来表示数字的字节数。比如对于 int32 类型的数字,一般需要 4 个 byte 来表示。但是采用 Varint,对于很小的 int32 类型的数字,则可...
阅读全文
找出不同数字
摘要:【找出不同数字】 一个整型数组里除了一个或者两个或者三个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。1,如果只有一个出现一次,考察到异或的性质,就是如果同一个数字和自己异或的活结果为零,那么循环遍历一遍数组,将数组中的元素全...
阅读全文
回文O(N)算法
摘要:【回文O(N)算法】 利用回文的对称性质,可以设计出O(N)的算法。 参考:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824
阅读全文
du熊的机器人
摘要:【du熊的机器人】Description du熊正在玩一个别人刚送给它的机器人。这个机器人只能在一个棋盘中行走,棋盘的左上角格子为(0, 0),右下角格子为(X, Y)。 du熊控制这个机器人从棋盘的左上角,走到右下角,再从右下角回到左上角。当机器人从左上角走到右下角的过程中,如果它当前所在格子为(x, y),则它只能走到(x+1, y)或(x, y+1)的格子;当机器人从右下角走回左上角的过程中,如果它当前所在的格子为(x, y),则它只能走到(x-1, y)或(x, y-1)的格子。并且du熊要求机器人从左上角走到右下角再走回左上角的整个过程中,最多经过同一个格子一次。 请你帮du熊...
阅读全文
点集最大共线问题
摘要:【点集最大共线问题】 问题:2D空间里有N个点,设计一个算法,求出此空间内最多有多少个点共线。 解法一:依次取2个点,确定一条直线,然后依次检测剩下的点是否在当前线段(叉积为零则在一直线上)。O(n^3)。 解法二:依次取1个点,统计出此点所有直线的等值斜率的个数。如果用Hash统计,则花费O(n^...
阅读全文
孩子的岁数
摘要:【孩子的岁数】问题: 一普查员问一女人,“你有多少个孩子,他们多少岁?”女人回答:“我有三个孩子,他们的岁数相乘是36,岁数相加就等于旁边屋的门牌号码。“普查员立刻走到旁边屋,看了一看,回来说:“我还需要多少资料。”女人回答:“我现在很忙,我最大的孩子正在楼上睡觉。”普查员说:”谢谢,我己知道了。” 问题:那三个孩子的岁数是多少。解答: 36 = 1 × 2 × 2 × 3 × 3,所以所有的可能为 1,1,36;sum = 38 1,2,18;sum = 21 1,3,12;sum = 16 1,4,9;sum = 14 1,6,6;sum = 13
阅读全文
数组中是否有两个数的和为10
摘要:【数组中是否有两个数的和为10】 先排序,花费O(N*logN) 再设置2个指针,一个放在Head,一个放在Tail。如果Element[Head] + Element[Tail] 10,则Tail--,如果==10,则找到了。此步花费O(N)。 所以总共花费O(N*logN + N) = O(N*logN)
阅读全文
1024!末尾有多少个零
摘要:【1024!末尾有多少个零】 参考:http://blog.csdn.net/cywosp/article/details/6729715
阅读全文
设计一个数据结构,包含两个函数,1.插入一个数字,2.获得中数
摘要:【设计一个数据结构,包含两个函数,1.插入一个数字,2.获得中数】 设计一个数据结构,包含两个函数,1.插入一个数字,2.获得中数。并估算时间复杂度。解法: 使用大根堆和小根堆存储。 使用大根堆存储较小的一半数字,使用小根堆存储较大的一半数字。 插入数字时,在O(logn)时间内将该数字插入到对应的堆当中。当两边个数差大于1时,从多的一边取头上的数加入另一边,以维持平衡。 获取中数时,在O(1)时间内找到中数。
阅读全文
数状数组
摘要:【数状数组】 参考:http://www.cppblog.com/Ylemzy/articles/98322.html
阅读全文
25匹马,每次能5匹一起跑,选出最快的3匹
摘要:【25匹马,每次能5匹一起跑,选出最快的3匹】 有25匹马,每次能5匹一起跑,选出最快的3匹最少需要几次? 我能想到的方法是7次,先分5组比,用去5次,然后每组头名比,用去1次。然后最快组的2号、3号和第二快组的1号、2号,以及第三快组的1号5匹买比赛,选出前2名即可,此处用去1计。所以加起来共计7次。 此法的优化方法才在于最后一次的比较。实际上是一次剪枝,把不可能合格的马提前去除。
阅读全文
10G个64bit整数,找出中位数
摘要:【10G个64bit整数,找出中位数】 题目:在一个文件中有10G个64bit整数,乱序排列,要求找出中位数。内存限制为2G。 解法:内存限制为2G表面上是限制,实际上是一种提示,在提示我们如何利用2G内存来解决这道题。 2G内存可以存放256M个64bit整数。我们可以将64bit的整数空间(2^64)平均分成256M(2^28)个取值范围,每个范围为(2^(64-28)),用2G的内存对每个取值范围内出现整数个数进行统计。这样遍历一遍10G整数后,我们再从头把2G中的数字统计一遍,便知道中数在那个区间内出现,以及这个范围内总共出现了多少个整数,第一轮中,这个区间为2^(64-28...
阅读全文
找出丢失的数字
摘要:【找出丢失的数字】 有一组数字,从1到n,从中减少了3个数,顺序也被打乱,放在一个n-3的数组里。请找出丢失的数字。 解法:快速排序改造。 时间复杂度:O(N)。 具体解释: 1)题目特点数字为1-N,所以在排序过程中,每次中位数取当前范围的n/2,则必然可以将数组拆分成等长的2份。 2)当一次中位
阅读全文
字节对齐实现
摘要:【字节对齐实现】 给定某大小,按4字节对齐,或按8字节对齐,咋实现?看下面objc runtime中的实现 上文中WORD_MASK根据环境可以设置为4或8。
阅读全文
进制转换
摘要:进位计数制 生活中我们常用的是10进制,但在计算机中数据都是以2进制的形式保存的。因此,熟练掌握2进制的特点和运算是编写程序并不可少的前提。 一般来说,进位计数制包含三个要素: 进位规则:十进制为逢十进一,二进制为逢二进一等。 每一个数位上数码所具有的权:十进制数码各位的权是以10为底的幂,二进制数
阅读全文
从字符串流中随机选择一个字符串
摘要:【从字符串流中随机选择一个字符串】 解题的核心是在幸存的字符串中挑选,并在过程中不断更新。 你打开文件并保存第一个字符串,此时有了一个备选字符串,并有100%的可能性选中它。保存这个字符串,继续读入下一个字符串,这样就有了2个备选字符串,选中每个的可能性都是50%。选中其中之一并保存,然后丢弃另一个。再读入下一个字符串,按照新字符串的33%原先幸存字符串67%的概率,在两者之间选择一个,然后保存新选中的字符串。【扩展】 如何从字符串流中随机选取1000个字符串。 对于数据流中的前1000个关键字,显然都要放到数组中。 对于数据流中的的第n(n>1000)个关键字,我们知道这个关键字被..
阅读全文