- 博客(5)
- 收藏
- 关注
原创 24点游戏(A better solution)
接上一篇文章,这篇文章将介绍24点游戏的一种改进的编程方法,将减少枚举过程的冗余。思路是编程之美上的解法二,思想是集合和动态规划(set & DP),利用了子集的结果求出更大集合的解,最后求出整个集合上面的的所有表达式,再进行筛选。书上的文字解释写的不太清楚,需要结合伪代码看,所以在此就把书上的伪代码拷贝过来,再附上自己具体实现的C++代码,欢迎大家指正!伪代码如下:24Game(Arra
2012-08-06 00:58:12
700
原创 24点游戏(Naive solutions)
24点游戏大家都很熟悉,具体题目可以参考编程之美1.16(P100)。根据书上的描述,给玩家4张牌,每张牌的面值在1~13之间,允许其中有数值相同的牌。采用加、减、乘、除四则运算,允许中间运算存在小数,并且可以使用括号,但每张牌只能使用一次,尝试构造一个表达式,使其运算结果为24。输入:n1 n2 n3 n4输出:若能得到运算结果为24,则输出一个对应的运算表达式。对于这个问题
2012-08-06 00:44:13
736
原创 子数组之和的最大值
求子数组之和的最大值问题是一个比较常见面试题,具体看见编程之美P184,题号为 2.14。看编程之美上的解答有时候反而不利于理解,上面列出三种解法,时间复杂度分别是O(n^3),O(n^2)以及O(n)。其实线性时间复杂度(O(n))的解法思路比较直观,主要思想是动态规划(DP),即求出以a[i]结尾的子串之和的最大值,再求n个这样的最大的值的最大值。 求出以a[i]结尾的子串之和
2012-07-29 20:00:45
747
2
原创 数组最长递增子序列(Longest Increasing Sequence)
数组最长递增子序列(Longest Increasing Sequence)(下称LIS)是个比较常见的题目,算法导论和编程之美上都可以找到。网上也同样可以找到很多解答和思路,今天自己写了一遍,整理下思路,代码比较简洁,相信比较好理解。 求LIS的思路是动态规划(DP),但是不同的DP思路有着不同的时间复杂度,常见版本时间复杂度为O(n^2),优化的版本为O(n*logn)。优化版
2012-07-29 01:36:04
867
2
原创 一个建树的程序
在网上看到微软的一个面试题,自己写了一遍,虽然结果正确,但代码写的不太简洁,仅供参考:一个TXT文件,每一行代表一个树的节点,格式为:“/Node1/Node2/Num3/.../NodeN”,其中NodeN的格式为{KeyN, ValueN},Key和Value都是32位十进制的整形数字。如/{0, 100}/{2, 200}/{4, 400}写程序读取该文件,并建立树的数据结构。注
2012-07-27 20:43:08
538
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人