精选一些《编程之美》相关资料

又要到一年的招聘季了,肯定又有很多人开始啃《编程之美》了吧。这本书从开阔视野的角度来说很好,不过限于篇幅,有的问题并没有讲清楚(甚至问题叙述模棱两可、被标榜为“鼓励同面试官交流以获得更多细节”);或者扩展问题本身很难,没有给予解答和提示。在我看书并在网络上查到的相关资料中,有很多重复的,也有不少基本没什么价值,有价值的文章是少数。为了便于查阅,也为了方便后人不必在搜索上浪费时间,我把比较有价值的文章的链接整理在下面,并附以简单说明。另外,对于一些比较早的资料,对应的是前几版的《编程之美》;《编程之美》早起版本错误之多在勘误表上可见一斑,不过既然新版已经修正了这些问题,那就请使用新书的读者放心,并在浏览资料时注意。

作为定位与《编程之美》类似的《剑指Offer》,上面有不少对相同问题的解;后者读起来实战的临场感更强一些(测试用例、边界条件等),两本书都值得一读。解法相同的题就没必要重述了,而解法不同或者做了一些扩展的题目一并标在下面。

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

  《编程之美》读书笔记23: 1.1 让CPU占用率曲线听你指挥

  很多完整程序,这里取个代表。事实上对于不了解windows编程的人来说,这个问题难度要高于3星。

1.3 一摞烙饼的排序

  烙饼啊烙饼{转自ITEO

    对扩展问题做了详细探讨,原出处没有找到。

1.7 光影切割问题

  逆序对:从插入排序到归并排序

    我的拙作,介绍了逆序对的寻找方式的优化。

1.11 NIM(1)一排石头的游戏

1.12 NIM(2)“拈”游戏分析

1.13 NIM(3)两堆石头的游戏

  拈及其各種變形遊戲

    第五页对1.13扩展的NIM(4)游戏有很好的解释,并且全文可以看作NIM游戏的阅读材料。

    我有写一篇总结NIM游戏规律的博文的计划,不过不知道时间是否允许。

  《剑指Offer》面试题40:只出现一次的数字

    又是XOR的应用。

1.18 挖雷游戏

4.11 扫雷游戏的概率

  这两道题原书没有解。

  快照/转帖

    最早解答4.11的博文的百度快照,源地址我打不开。

  编程之美扫雷篇

    另一个角度解答4.11问题。

  解答《编程之美》1.18问题1:给所有未标识方块标注有地雷概率

    我的拙作之二,对于网络上没有分析的1.18问题1进行解答。

2.1 求二进制中1的个数

  《编程之美》读书笔记——“求二进制数中1的个数”

    这个是我买的纸质版《编程之美》这一节的读者反馈里的链接,不过翻了下电子版,似乎早期的没有,因此附在这里。

  《剑指Offer》面试题10:二进制中1的个数

    如果输入是负数,那么《编程之美》第一段代码还能运行吗?(尽管它与《剑指Offer》解一不同)

2.19 区间重合判断

  编程之美2.19——区间重合判断(线段树)

    扩展问题二维空间的覆盖问题的线段树解。

2.21 只考加法的面试题

  《编程之美》2.21 只考加法的面试题

    这个题原书也没有解,此文已经很详细了。

3.4 从无头链表中删除节点

  《剑指Offer》面试题13:在O(1)时间删除链表结点

    如果给定了单链表头结点和一个结点的指针,要求删除此结点(可能是头结点或尾结点),又该如何求解?

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

  《编程之美》3.6判断链表是否相交之扩展:链表找环方法证明

    我的拙作之三,其中原问题的解借鉴的部分请见注释,此文主要是说明怎样证明找环和找环入口算法的正确性。

    同时,根据判环算法,可以解决3.11的扩展问题:链表判断是否有环的程序改错。

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

  《剑指Offer》面试题7:用两个栈实现一个队列

    介绍了另一个问题:如何用两个队列实现一个栈?

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

  《编程之美: 求二叉树中节点的最大距离》的另一个解法

    本节总结里提到的链接,其实个人认为代码比原书中漂亮多了。我转载了此文:http://www.cnblogs.com/wuyuegb2312/articles/3174476.html

3.10 分层遍历二叉树

  《编程之美:分层遍历二叉树》的另外两个实现

    本节节末提到的链接。其实我似乎记得当初在上严蔚敏版《数据结构》课程时,分层遍历二叉树就是借助队列实现的,思想和这个一样。

3.11 程序改错

  http://www.cnblogs.com/wuyuegb2312/archive/2013/05/26/3090369.html

我的拙作之四,全方位分析二分查找这个老生常谈的问题,并不仅仅限于代码改错。有意避开陷阱要比掉入陷阱后想办法爬出来更好,虽然这并不代表我们不需要知道如何爬上来。扩展问题——判断链表是否有环的程序改错——请看3.6的链接。

4.2 瓷砖覆盖地板

  poj 2411 & 编程之美 4.2 瓷砖覆盖地板

是对扩展问题1“1*2瓷砖覆盖8*8地板”的状态动态规划解法中我所看到的最简洁易懂、空间占用少的。

更可贵的是本文提供了p*q瓷砖覆盖M*N地板可行性的一般结论和阅读资料(MIT的pdf)。

《剑指Offer》面试题9:斐波那契数列

  扩展问题中,2*M的地板覆盖问题的递推公式F(M)=F(M-1)+F(M-2),形式上是斐波那契数列。

4.3 买票找零

  从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南

    我的拙作之五,标题说明一切。

4.5 磁带文件存放优化

  《编程之美》4.5磁带文件存放优化:最优解是怎样炼成的

    我的拙作之六,原书对于解是最优解根本没有说明白,只是举了个例子而已;这篇文章将告诉你为什么是最优解。

4.7 蚂蚁爬杆

  编程之美4.7蚂蚁爬杆扩展问题附猎人抓狐狸(必胜策略)

    对扩展问题很详细的探讨。

另外再附两个链接,请注意时效性:

  博文视点

    《编程之美》出版方,收录了一些问题的网友的解答。

  薛迪的专栏

    很多解题法被《编程之美》收录。

    原文作者:沧海笑w
    原文地址: https://blog.csdn.net/wangshouchao/article/details/9900169
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞