
算法
文章平均质量分 60
Oswin
安静的思考,踏实的走路
展开
-
一道算法题——合并有交集的集合
题目如下,给定一个字符串的集合,格式如: {aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh} 要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出 {aaa bbb ccc ddd hhh},{eee fff}, {ggg} (1)请描述你解决这个问题的思路; (2)原创 2012-02-29 22:46:12 · 4480 阅读 · 2 评论 -
大量URL去重
[size=medium]问题:[i]有大量的字符串格式的URL,如何从中去除重复的,优化时间空间复杂度[/i]我的思路,1. 将URL存入hash链表,[b]每个URL读入到hash链表中[/b],遇到重复的就舍弃,否则加入到链表里面,最后遍历得到所有不重复的URL。空间复杂度M,时间复杂度为O(N+N/M),M为不重复的URL,N为总URL数,但是M无法预测,所以存在风险,...原创 2012-03-01 20:05:30 · 365 阅读 · 0 评论 -
最长的滑道
问题: Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 1...原创 2012-03-19 19:53:40 · 144 阅读 · 0 评论 -
最后拿硬币的人输
两个人轮流拿10个硬币,每次可以拿1或2或4个,拿到最后的那个人为输,问:怎样才能必胜? 思路是从最简单的情况概况,找到一定的规律。 总结如下,其中A、B代表两个人,数字代表对应人选择前剩下的硬币数,第一行的解释是“有1个硬币留给了A,A拿了一个,剩下0个硬币留给了B,A就输了”: A B 对A的结果1 0 lose2 ...原创 2012-03-29 19:57:15 · 598 阅读 · 0 评论 -
求最长升序序列
求一个序列的最长的升序序列,比如数组array[10]。 我的想法:1. 以变量max_length记录最长的序列长度,以loc记录最长序列的位置,初始化都为0。2. 设置变量temp_length=0,temp_loc=0,遍历每个元素array[i]{ 如果array[i]<=array[i+1],temp_length++; 否则{ ...原创 2012-04-07 22:14:47 · 214 阅读 · 0 评论 -
四堆抽牌如何获胜
问题描述: 发四堆扑克,一堆是2张,一堆是5张,一堆是8张,一堆是10张。排列如下: 2 5 8 10 两个人,轮流拿牌。每次只能在一堆里面拿,无论拿几张都可以,最多一次可以把任意一堆牌全拿走。经过N轮拿牌过后,拿最后一张牌的人输。 解决思路:1. 从最简单的情况开始考虑,在简单的情况下可以取胜,才能在更复杂的情况取胜;2. 我能否取胜,取决于“我本次拿走...原创 2014-03-19 19:33:21 · 689 阅读 · 0 评论 -
计算数自然数序列中的1和2
问题: 给定一个自然数N,计算1,2,3...N中,出现1和2的数量。比如1,2,3...10,一共出现了3次,1,2,3...12,一共出现了7次。 思路: 比如计算54321,可以先计算50000,再计算50001-54321中1和2的个数,而后者又可以看成计算4321中1和2的个数,于是简化了问题。其中计算50000的时候,可以计算49999中有多少个1和2,...原创 2014-10-16 22:30:10 · 219 阅读 · 0 评论 -
把数字串变成2012玛雅密码
问题: 玛雅密码是一串由0、1、2组成的密码,这串数字中如果包含2012,就可以解开末日的大门。给定一串由0、1、2组成的字符串,只有相邻的数字可以交换,求通过最少多少次变换可以得到玛雅密码,并给出这串密码。 思路: 经过很久很久的尝试,放弃了一次性拼凑2012的想法,改用预处理得到所有数字范围中符合玛雅密码的部分,再递归遍历给定的数字串,得到该串所有可能的变换,并比...2014-10-16 22:43:09 · 205 阅读 · 0 评论 -
把数字拆分成2的幂的和
问题: 任何数都能分解成2的幂,比如 7=1+1+1+1+1+1+1 =1+1+1+1+1+2 =1+1+1+2+2 =1+2+2+2 =1+1+1+4 =1+2+4共有6种分解方式,设f(n)为任意正整数可能分解总数,比如f(7)=6写个算法,输入数,求出其分解的总数。 思路: 先按照树形结构,把一个数...2014-10-18 10:47:28 · 1307 阅读 · 0 评论 -
找出数组中和为N的所有配对
[i][size=small]有一个集合a,里面有n个正整数,乱序排列。给定一个正整数N,求,a中任意两个数相加等于N,共有哪些种组合情况。例如,集合为{1,3,44,2,4,5,54,222,368} N=6,则结果集为{1,5},{2,4} [/size][/i][size=medium]我的思路,[list]1. 用N减去每个元素得到另一个数组b,[b]嵌套循环[/b]找到...原创 2012-03-01 19:43:38 · 1439 阅读 · 0 评论 -
一道算法题——从数据流中随机去m个数
题目:有一个很大很大的输入流,大到没有存储器可以将其存储下来,且只输入一次,如何从这个输入流中随机取得m个记录。我的思路:首先,存储开始的m条记录,存放于数组result[m]中;然后,假设有n条记录,每一次读取记录后,取随机数x,0<= x < n;判断随机数, 当0<= x < m时,我们将记录存放到result[x]中; 当m<= x < n...2012-03-01 15:39:06 · 269 阅读 · 0 评论 -
网页去重问题
问题:假设有10亿网页已经被我们存下来,并提供如下信息:网页全文(即网页的源码)、全文长度、网页正文(即网页中提取的主体文字)、正文长度,以及其他网页提取物等,现在希望去掉其中的重复网页,请提出可行的方案,计算出每个网页对应的重复度,你可以自己对网页重复下定义,也可以提出需要哪些更多的网页提取物来实现更好的去重复方案。我的思路:1. 根据网页正文做hash表。a. 网页原创 2012-03-02 18:31:51 · 1434 阅读 · 0 评论 -
求一个字符串中的最长回文前缀
如题,需要说明的是这个与我的上一篇博客是不一样的,这个求的是前缀,多了个限定条件。我的思路,1. 首先可以按照上一篇的博客来解,但显然浪费了。2. 我们需要充分利用前缀这个条件,我的第一反应就是用栈,但是想来想去也没有好办法,后来想想,如果是回文前缀,那么一定会在回文的另一端出现字符串的首字母。于是,a. 遍历字符串,找到所有与首字母相同的位置,存入数组ends,复原创 2012-03-02 20:42:20 · 5163 阅读 · 3 评论 -
求一个字符串中的最长回文序列
如题,下面说说我的思路,我想到的算法如下:a. 遍历字符串,找到所有相邻两个字母相同的位置(比如aa),加入到链表centers1中,找到所有隔一个字符相同的位置(比如aba),加入到centers2中,复杂度O(N);b. 设置最大回文的长度maxLength=2和回文的起始位置start=centers1[0];c.遍历centers1,对每一个位置进行如下操作:原创 2012-03-02 19:46:28 · 3141 阅读 · 0 评论 -
最长的滑道
问题:Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21原创 2012-03-02 22:37:06 · 2190 阅读 · 0 评论 -
计算质因数
问题: 计算一个数的质因数个数,1不是质因数。比如20=2*2*5,2、2、5就是20的三个质因数。思路: 从小到大,找到N的因数M,递归查找M和N/M的的质因数。原创 2014-10-22 21:57:26 · 863 阅读 · 0 评论 -
把数字拆分成2的幂的和
问题: 任何数都能分解成2的幂,比如 7=1+1+1+1+1+1+1 =1+1+1+1+1+2 =1+1+1+2+2 =1+2+2+2 =1+1+1+4 =1+2+4共有6种分解方式,设f(n)为任意正整数可能分解总数,比如f(7)=6写个算法,输入数,求出其分解的总数。原创 2014-10-22 21:55:23 · 3335 阅读 · 0 评论 -
把数字串变成2012玛雅密码
问题: 玛雅密码是一串由0、1、2组成的密码,这串数字中如果包含2012,就可以解开末日的大门。给定一串由0、1、2组成的字符串,只有相邻的数字可以交换,求通过最少多少次变换可以得到玛雅密码,并给出这串密码。 思路: 经过很久很久的尝试,放弃了一次性拼凑2012的想法,改用预处理得到所有数字范围中符合玛雅密码的部分,再递归遍历给定的数字串,得到该串所有可原创 2014-10-22 21:57:23 · 1093 阅读 · 0 评论 -
计算数自然数序列中的1和2
问题: 给定一个自然数N,计算1,2,3...N中,出现1和2的数量。比如1,2,3...10,一共出现了3次,1,2,3...12,一共出现了7次。 思路: 比如计算54321,可以先计算50000,再计算50001-54321中1和2的个数,而后者又可以看成计算4321中1和2的个数,于是简化了问题。其中计算50000的时候,可以计算49999中有多原创 2014-10-22 22:02:06 · 1487 阅读 · 0 评论 -
计算质因数
问题: 计算一个数的质因数个数,1不是质因数。比如20=2*2*5,2、2、5就是20的三个质因数。思路: 从小到大,找到N的因数M,递归查找M和N/M的的质因数。def count_prime(number, expr): count = 0 for i in range(2, number/2 + 1): if numbe...2014-10-18 10:53:58 · 407 阅读 · 0 评论