二维矩阵求解最大移动距离

问题: N*N的表格中存放自然数,从任意位置开始,表格中的数字可以向四邻域移动(前提是移动方向上的数字必须小于当前数字),移动一次距离加一。求最大移动距离? 分析: 问题可以看成是一个动态规划问题,H[i][j] = max{H[i-1][j], H[i+1][j], H[i][j-1]...

2012-08-31 23:50:00

阅读数:557

评论数:0

插座问题

题目: 设有28盏灯,拟公用一个电源,则至少需有4插头的接线板数多少个? 分析: 看到这个题,可以将插座相连的情况看做一棵树,那么我们可以采用树的特性来求解。 假设需要的接线板数目为X,我们可以得到如下不等式 4 * X >= 28 + ( X - 1) 其中不等式左边表示X个插...

2012-08-31 16:21:22

阅读数:904

评论数:0

字符串转移问题

问题: 函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*' 分析: 由于问题的特殊性,我们可以直接将字符往后移,那么前面的位置全部用'*'填充,具体代码如下: #include #include using namespace std; /* ...

2012-08-31 00:33:33

阅读数:795

评论数:0

求解1-10000区间内的素数

问题: 求出所有1-MAX之间的素数 分析: 我们知道如何判断一个数是否为素数,判断number是否可以被1到sqrt(num)之间数整除,如果存在被整除的,不是素数,否则就是素数。 但是,如果用这种方法来计算,时间复杂度会非常高,我们采用另一种更好的方法——筛选法。 筛选法直观上比较好...

2012-08-27 21:52:24

阅读数:4164

评论数:1

颠倒栈

问题: 用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。 分析: 问题很简单,可以直接使用两个堆栈就行,一个pop,一个push,这样就颠倒了,但是如果加强问题,不能使用另一个栈,我们可以考虑使用递归调用(实...

2012-08-26 13:04:16

阅读数:692

评论数:0

加法运算

题目: 写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。 分析: 由于不能使用四则运算,我们可以考虑使用其他的操作,考虑是用位操作,来模拟加法操作,首先不考虑进位,使用异或操作,然后再考虑进位,使用与操作,再将进位与异或的结果进行相加,由此循环,进位为0停止。 算法代码...

2012-08-26 09:57:16

阅读数:622

评论数:0

O(n)时间的排序

问题: 某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。 分析: 《算法导论》中提到,所有基于比较排序的算法,时间复杂度最低为O(nlogn),所以不能采用普通的比较排序(堆排,快排等),采用计数排序或者基数排序,桶排等。我们采...

2012-08-25 12:08:30

阅读数:4827

评论数:0

字符串的组合

问题: 输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 分析: 以前做过类似的题目,求解字符串所有的排列,采用的递归思路。 二进制方法 这个题我想到的第一种方式是考虑到2^n的特殊性,如果字符串长度为5,我们可...

2012-08-25 10:52:34

阅读数:741

评论数:0

数对之差的最大值

问题:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。  例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。 分析: 1,分治法 将一个数组分为两部分,分别求解左边最大之差和右边最大之差,合并的时候再计...

2012-08-25 10:05:16

阅读数:681

评论数:0

腾讯笔试题

#include using namespace std; class ClassA { public: virtual ~ ClassA() { } ; virtual void FunctionA() { } ; }; class ClassB { public: vi...

2012-08-18 17:45:12

阅读数:472

评论数:0

【编程之美】 4.8统计所有蚂蚁出去的时间

蚂蚁爬杆的算法中,只求出了蚂蚁出杆的时间,但是没有得到每个蚂蚁出去的时间,这里没有固定的算法,采用编程模拟实现,代码如下: #include using std::cout; using std::endl; using std::swap; int left[29]; int right[29...

2012-08-18 10:49:47

阅读数:773

评论数:0

求解二进制数中1的个数

这道题很多考试中都出现了,去年参加阿里笔试就考到了这道题,编程之美也提到了,比较好的方法采用位操作,解决方法如下: 执行一次x&(x - 1),将最右边的1置为0,知道最后x变为0,循环结束,时间复杂度是O(M),其中M是二进制数中1的个数。 另一种解法,时间复杂度是log(n...

2012-08-14 00:35:12

阅读数:697

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭