专栏名称: 九章算法
专业的北美IT求职经验分享、技术交流社区,帮助你找到好的IT工作。由硅谷顶尖IT企业工程师维护。提供专业的算法培训/面试咨询,官网 www.jiuzhang.com
目录
相关文章推荐
51好读  ›  专栏  ›  九章算法

还在断点调试?教你四种调试技巧让你快速定位错误!

九章算法  · 公众号  · 算法  · 2017-01-07 08:05

正文

请到「今天看啥」查看全文



使用这种调试方法的另外一个好处是,你很自然的希望你的程序可以“分阶段”输出一些中间结果,这种分阶段处理的方式,也是我们在课上经常强调的,把大问题变成小问题,然后逐个击破的编程思想。养成这种编程习惯之后,可以非常有效的帮助你在写程序的时候,就避免掉错误。


2

技巧2: 一行一行改成参考程序


在九章的官网 http://www.jiuzhang.com/solutions/ 中有 LC 完整的参考程序库,其中 Java 程序的一部分代码是我自己亲自编写的,具备较高的质量和参考价值。很多题目也给了多种不同的解法。比如 Binary Tree Level Order Traversal 这一题,给出了三种 BFS 的参考程序和 1个 DFS的参考程序: http://www.jiuzhang.com/solutions/binary-tree-level-order-traversal/ 。通常来说很多题目,你不仅仅需要掌握其中一种方法,而是需要掌握这个题所有的解决办法。


有不少同学经常会来问我:“老师,我的代码和参考程序一样啊,为什么还是不对。” 这种时候,我通常建议他们,将自己的代码,一行一行的改成参考程序。这样,当他们发现哪一行代码不一样的时候,就自然定位到了错误。


举一个例子,就以 Binary Tree Level Order Traversal 为例,宽度优先搜索算法(BFS)是面试必须掌握的一种算法。来看看下面这个有错误的代码(请花3分钟阅读一下,并找出错误所在):



从程序思想上来看,好像并没有什么错。很难直接发现有什么问题。与参考程序逐行对比之后会发现,错误发生在第14行。


参考程序中,写法是:



和上面的程序写法是:



这两种写法存在巨大区别,原因是在循环体内部,我们会不断往 queue 中放东西,这导致了queue.size() 的值是不断变化的。而没有起到我们只想循环当前这一层所有点的功能。








请到「今天看啥」查看全文