编程之美读书心得

来源:互联网 发布:淘宝如何判定虚假交易 编辑:程序博客网 时间:2024/05/16 12:35

面试:一般对公司的有一定的了解,在公司问道你对公司有何了解时才能游刃有余,了解得更深了才能有更多的交流,交流多了才有机会

Dev:给的编程题一般都不是很复杂的,但是会有一些细节需要处理,细心并且能需找最优就是考察的目的

Test:比如问如何测试一个三角形,就需要考虑到方方面面,尽可能的多,不要简略。

Pm:比如房间有3盏灯,进出一次找出对应开关,实际要联系生活,先开一盏会发热。只有脑筋活跃,才能想出更出色的产品。

总结:

1.知己知彼。知己,就是要了解自己的能力、兴趣、职业发展方向;知彼,就是

   要了解公司的文化、战略方向和择才标准。

2.笔试就是基础,用扎实的理解和考虑完备的解答来征服阅卷者。

3.面试就是探讨,用缜密的代码和严密的分析赢得未来同事的尊重。思考问题的

   方法比结果重要,面试者会更加在乎你解决问题的思考过程。

4.你的工作就是最好的面试,不要把时间花在寻找捷径和背诵答案上,要通过实

   际的工作和产品来体现自己的水平。


第 章 游戏之乐——游戏中碰到的题目 

 1.1 让 CPU 占用率曲线听你指挥

解法一:简单的解法

#include<windows.h>//Sleep()int main(){    for(;;)    {        for(int i=0;i<9600000;i++)//根据cpu的频率计算出电脑能处理的多少次,此例为2.4GHz            ;        Sleep(10);    }    return 0;}
当你能熟悉更多和windows相关的API时,你才能随心所欲的解决这个问题的不同变型,积累是一切的前提呀
 

 1.2 中国象棋将帅问题 

用一个变量存储将帅可以共存的位置,首先需要明确如何简化将帅的位置(用1-9数字表示),之后就是选择数据表示方法了:

1)使用8位0/1表示,前4为将,后4为帅;2)用i=81表示所有可能;3)用struct表示

 1.3 一摞烙饼的排序 

只能翻转上面开始的烙饼,也许不能现场给出程序,但是能提供解决方法也行:首先是将对打的烙饼通过2次翻转实现在最下面,更优的方法是将大小连续的烙饼翻转到一起,在更优的方法就是对程序中可能出现的情况进行剪枝来优化。程序是一个有整体思路到细节不断优化提升的,最怕的是什么思路都不提供,提供的思路不进行优化。

 1.4 买书问题 

书价相同,同时买不同卷会有折扣,求给定不同书的卷数时的最优折扣

1)首先想到贪心策略,当8本书的时候出现不是最优,所以考虑到动态规划,注意到书的价钱都相同,所以动态规划方程使用时有一个最小表示来简化不同书不同卷数的问题,之后得到动态规划方程即可;2)从小到大归纳出折扣的规律,就可以利用贪心算法了哦

 1.5 快速找出故障机器 

数成对出现,找出单的数

1)单只有一个单的数,使用异或预算;2)预先知道这些数,构造方程组(和,平方和...)

 1.6 饮料供货 

饮料最大容量为2^n,满意度不同,求满意度最大的购买的方法

1)动态规划,简单的背包问题求解;2)贪心,最大化满意度最大的饮料即可

 1.7 光影切割问题 

直线可以把平面切割成几部分

1)求直线有多少交点,每多一个交点能多出几部分2)转化为求解逆序数(已知问题,分治求解)

 1.8 小飞的电梯调度算法 

电梯停在哪一层需要的爬楼总数最小

比较这一层的上一层、下一层和人数的关系,得出应该是停留在哪一层,这样一次遍历就可以解决问题

 1.9 高效率地安排见面会 

选择合适的同问模型,转化为已知问题,此例转化为图的着色问题

 1.10 双线程高效下载 

分析清楚需要处理的问题,起始条件、怎么执行、判断结束以及符合的数据结构,此例为队列

 1.11 NIM1)一排石头的游戏 

 1.12 NIM2)“拈”游戏分析 

 1.13 NIM3)两堆石头的游戏 

从小规模开始分析问题,然后用得出的规律解决问题(奇偶、0/1)

 1.14 连连看游戏设计 

首先明确游戏需要做到的4件事:生成界面;需找路径;结束判断;解决死锁;其中最复杂的是需找路径,实际还是使用的最短路径算法,只是需要考虑到最多3个转弯

 1.15 构造数独 

从一个解映射构造出其他解从而解决问题

 1.16  24点游戏 

将问题划分成小的集合之间的问题进行考虑,只要问题是可以细化的,就是可解的

 1.17 俄罗斯方块游戏 

 1.18 挖雷游戏 


第 章 数字之魅——数字中的技巧 

 2.1 求二进制数中 的个数 (考虑过位运算没有?)

 2.2 不要被阶乘吓倒 

转化为问题还是一个数的多少次幂

 2.3 寻找发帖“水王” 

寻找出现次数大于一半的数,每次处理2个不同的数即可

 2.4  1的数目 

列出数学函数求解即可

 2.5 寻找最大的 个数 

取k个数形成最小堆,然后遍历余下的数更新堆

 2.6 精确表达浮点数 

 2.7 最大公约数问题 

1)除法;2)减法;3)考虑奇偶

 2.8 找符合条件的整数 

 2.9 斐波那契(Fibonacci)数列 

1)递归;2)求解递推公式;3)使用数列分治求解

 2.10 寻找数组中的最大值和最小值 

遍历需要2*N次,而成对比较,需要1.5N次,这就是优化

 2.11 寻找最近点对 

最优解其实就是最快的排序算法的思想,清楚明白这个,就很容易解决这个问题,当然分治也可以解决这个问题

 2.12 快速寻找满足条件的两个数 

先对数组进行排序,然后从2端往数组当中遍历即可

 2.13 子数组的最大乘积 

 2.14 求数组的子数组之和的最大值 

遍历数组,遇到和小于0时重新开始,用max记录最大值即可

 2.15 子数组之和的最大值(二维) 

思想和上面一样,只是将二维的情况压缩到一维就行求解

 2.16 求数组中最长递增子序列 

使用一个新数组存储最长递增子序列的数值,遍历数组更新这个数组即可

 2.17 数组循环移位 

首先要考虑到的右移K位大于数组长度N,之后交换2部分即可

 2.18 数组分割 

可以将所有数组求和之后除2,然后转化为背包问题

 2.19 区间重合判断

思路:将此区间以此和无序区间比较,删除重合部分,若处理完后此区间还有值,则不重合

 2.20 程序理解和时间分析 

 2.21 只考加法的面试题 

考虑数值是否可能越界


第 章 结构之法——字符串及链表的探索 

 3.1 字符串移位包含的问题 

思路:在string+string中查找目标字符串

 3.2 电话号码对应英语单词 

1)使用循环,利用while扩展多重for循环,详见:http://blog.csdn.net/czl1252409767/article/details/8912590

2)使用递归代替多重for循环

3)问题转化的思想,题目是问不同的数字可以组合成多少单词,实现起来没有见单词转化为数字然后匹配这样简单

 3.3 计算字符串的相似度 

将问题转化为递归模型,使用数组存储值来优化递归程序

 3.4 从无头单链表中删除节点 

将删除节点的data值替换为下一个节点,然后删除下一个节点即可(狸猫换太子

 3.5 最短摘要的生成 

 3.6 编程判断两个链表是否相交 

数据结构特征:相交的环从相交处开始会一直相交直到尾结点

 3.7 队列中取最大值操作问题 

实现思路:使用栈来实现队列,一个栈用来保存入队,一个栈用来出对,注意细节:栈空!

 3.8 求二叉树中节点的最大距离 

思路:节点的最大距离=左子树最大距离+右子树最大距离,并且只会在最大距离更大的子树一边出现比当前节点更大的最大的距离

 3.9 重建二叉树 

思路:确定根节点(书上的例子,主要需要处理的问题在边界检测上)

 3.10 分层遍历二叉树 

思路:使用队列来存储每层的数字

 3.11 程序改错 

程序容易出现的问题:1)除0 ,遇到除法时要小心;2)溢出,遇到加法和乘法等;3)循环的初始和退出条件


第 章 数学之趣——数学游戏的乐趣 

 4.1 金刚坐飞机问题 

 4.2 瓷砖覆盖地板 

通过奇偶来分解问题

 4.3 买票找零 

符合要求的不好求,就求不符合要求的,然后就可以得到了

 4.4 点是否在三角形内 

1)利用面积,但是计算量大;2)利用向量的叉积

 4.5 磁带文件存放优化 

思路:将总时间用数学公式给出来,就可以发现规律

 4.6 桶中取黑白球 

推理可知:处理过程其实是简单的异或运算

 4.7 蚂蚁爬杆 

题目给的要求是蚂蚁相撞后掉头,但是处理的时候可以想成擦肩而过,因为最后要求的是所以蚂蚁走的总长度

 4.8 三角形测试用例 

 4.9 数独知多少 

 4.10 数字哑谜和回文 

 4.11 挖雷游戏的概率

0 0
原创粉丝点击