
思考题
bladeLight
这个作者很懒,什么都没留下…
展开
-
主方法研究
最近微软、google的笔试题中老出现利用住方法求解时间复杂度的题目,这里必须要学习一下了:首先介绍一下主定理:设 T(n)=aT(n/b)+f(n),a>=1和b>1是常数。那么T(n)可能有三种情况,还是见算法导论P44页吧,这里打公式太难了。下面给出一道google笔试题:T(n) = 25T(n/5)+n^2的时间复杂度?首先a=25,b=5,n^logb^a=n^原创 2013-04-04 20:31:17 · 2463 阅读 · 1 评论 -
检测毒药
有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?答:昨天思考这个问题,没有想太明白,归根还是自己理解的不透彻。我们将1000个瓶子进行编号0~999,因为999=1111100111,因此我们只需要使用10位来表示这999个瓶子,因此也只需要10只老鼠。第原创 2013-04-04 14:23:15 · 1675 阅读 · 0 评论 -
一点体会
昨天晚上做了微软校招的笔试题目,感觉自己的基础知识还是很不扎实,不能形成一个体系。思考问题的时候,要从自己的体系结构中来思考而不是完全靠直觉,直觉这种东西说有突然就有了,说没有怎么也来不了。很多不该错的题目都弄错了,这完全暴露了自己的基本功还不扎实,不能够运用自如。比如有一道题目求N!后零的个数,这是编程之美上的一道题目,自己虽然知道解法,但忘了具体的原理,感觉虽然看了编程之美好几遍了,还没有将这原创 2013-04-05 12:28:15 · 766 阅读 · 0 评论 -
从数组中选择m个数,使得和为sum,递归写法
这个程序在vs下没问题,但在dev下会崩溃,不知什么问题#include#include#includeusing namespace std;const int res=16;int sum=0;int cnt=0;vector v;void print(vector v){ for(int i=0;i<v.size();i++) cout<<v[i]<<" "原创 2013-04-18 15:12:23 · 1298 阅读 · 0 评论 -
随机提取中位数
题目:Numbers are randomly generated and stored into an (expanding) array. How would you keep track of the median?思路分析:使用两个堆,一个最大堆(存储小于中位数的一半的元素),一个最小堆(存储大于中位数的一半的元素),只要维护好这两个堆,根据堆顶元素就能得到中位数。我们的程序保证左右两原创 2013-07-27 23:02:18 · 926 阅读 · 0 评论