![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
★★★★
文章平均质量分 71
liql2007
Sina微博liql2007
展开
-
找出会移动的奖品
问题:有n个瓶子,有一个奖品,游戏者需要猜出奖品在哪个瓶子中。有n个黑色的瓶子(以至于游戏中看不到瓶中是否有东西)设从0到n-1编号,一字排开。每一次如果游戏者猜错了,那么奖品会各以50%的概率移动到左边或者右边的瓶子中。当奖品位于最左边或者最右边,游戏者猜错时,奖品必然右移或者左移。请问,游戏者最少需要猜多少次,可以保证猜到奖品位置。ps:好像是网易游戏面试题,比原创 2013-07-24 10:57:24 · 1136 阅读 · 0 评论 -
KMP算法
在KMP算法中,next数组的计算是关键。以下是几种求解next数组的方法:1)个人认为最好理解的方法 void getNext(string str, vector &next){ if(str.empty()){ next.clear(); return; } int len = str.length(); next.resize(len);原创 2013-09-20 11:03:29 · 612 阅读 · 0 评论 -
二叉树的非递归遍历
在实际应用中,二叉树的遍历一般都采用递归形式,简洁、直观。但在笔试、面试中却很喜欢考察非递归形式的写法,下面将二叉树的非递归遍历实现总结如下:节点定义:struct Node{ int val; Node *left, *right;};1)中序遍历实现Ivoid InOrderTraverse(Node *root){ stack st; st.原创 2013-09-20 16:35:29 · 646 阅读 · 0 评论 -
老鼠与毒酒
问题I:有1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠。这是老鼠与毒酒最经典问法。分析:此问题可以用二进制的思想来解答。将1000桶酒编号为0,1,...,999。用10只老鼠分别二进制中的相应位,即第1只老鼠,喝掉编号的二进制表示中右边第一位为1的桶内的酒,即1,3,5,7,。。原创 2013-08-02 11:39:33 · 3045 阅读 · 0 评论 -
原地归并
问题I:传统归并排序需要O(n)的空间发杂度,但是否能够实现原地归并排序呢?即O(1)的空间复杂度。时间复杂度还是否是O(logn)?对于这个问题,网上有很多资料,讲的比较清楚的有下面这个帖子:http://www.ahathinking.com/archives/103.html我们知道,无论是基于单个记录的两两归并,还是利用插入排序先得到较长的子序列然后归并,在算法原创 2013-08-03 19:32:42 · 1252 阅读 · 3 评论 -
楼层扔鸡蛋问题
==有限层数和蛋数,求即使最坏情况下需要的最少判断次数==两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。(参见[两个鸡蛋--一道Google面试题])这是典型的动态规划问题。假设f[n]表示从n层楼找到摔鸡蛋不碎安全位置的最少判断次数。假设第一个鸡蛋第一次转载 2013-07-24 12:33:23 · 1036 阅读 · 2 评论 -
N个正整数连接成最大的数
题目:给出N个正整数,如 {7, 959, 95, 71, 1}, 求将这些数连接起来所组成的最大的数,即959957711。变形:给出N个由0...9组成的字符串(开头可能为零),求将这些字符串连接起来,所组成的最大的数。代码:#include #include #include #include using namespace std;string MaxNum原创 2013-07-19 12:58:33 · 1752 阅读 · 1 评论 -
最长的含有相同数目的01子串 & 括号匹配问题
题目:给定一个字符串,字符串中只包含‘0’和‘1’。请找到一个最长的子串,使得其中0和1的数量是相同的例1:“10101010” 结果就是其本身例2:“0011110”结果是“0011”变形:给定一个字符串,字符串只包含‘(’和‘)’,请找出一个最长的子串,使得该子串满足括号法则。例1:“(()())()()”结果为自身例2:“())()()(”结果为“()()"原创 2013-07-20 09:16:42 · 3049 阅读 · 1 评论 -
三路划分
问题:对一个只可能含有1、2、3三种值的数组,按升序排序。另一种常见问法:有一个只可能含有红、绿、蓝三种颜色的序列,进行分类,使红色都位于最左边,蓝色都位于最右边。解: 实际是对快排中用到的二路划分的扩展——三路划分。设原数组为A, 有n个元素。使用三个指针left, middle, right, 那么A[0]...A[left-1]的值都为1A[left]...A原创 2013-07-21 11:33:07 · 1526 阅读 · 1 评论 -
std::sort与qsort
std::sort与qsort的性能对比,一般来说std::sort要由于qsort的qsort没有指定实现原创 2014-09-05 00:28:19 · 1392 阅读 · 0 评论