第1章 面试的流程
第2章 面试需要的基础知识
第3章 高质量的代码
第4章 解决面试题的思路
第5章 优化时间和空间效率
第6章 面试中的各项能力
第7章 两个面试案例
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
6.4 抽象建模能力
计算机只是一种工具,它的作用是用来解决实际生产生活中的问题。程序员的工作就是把各种现实问题抽象成数学模型并用计算机的编程语言表达出来,因此有些面试官喜欢从日常生活中抽取提炼出问题考查应聘者是否能建立数学模型并解决问题。要想顺利解决这种类型的问题,应聘者除了需要具备扎实的数学基础和编程能力之外,还需要具有敏锐的洞察力和丰富的想象力。
建模的第一步是选择合理的数据结构来表述问题。实际生产生活中的问题千变万化,而常用的数据结构却只有有限的几种。我们在根据问题的特点综合考虑性能、编程难度等因素之后,选择最合适的数据结构来表达问题,也就是建立模型。比如在面试题44扑克牌的顺子中,我们用一个数组表示一副牌,用11、12和13分别表示J、Q、K并且用0表示大小王。在面试题45圆圈中最后剩下的数字中,我们可以用一个环形链表模拟一个圆圈。
建模的第二步是分析模型中的内在规律,并用编程语言表述这种规律。我们只有对现实问题进行深入细微的观察分析之后,才能找到模型中的规律,才有可能编程解决问题。例如在本书2.4.2节提到的青蛙跳台阶问题中,它内在的规律是斐波那契数列。再比如面试题43n个骰子的点数问题,其本质是求数列f(n)=f(n-1)+f(n-2)+f(n-3)+f(n-4)+f(n-5)+f(n-6)。找到这个规律之后,我们就可以分别用递归和循环两种不同的方法去写代码。然而,并不是所有问题的内在规律都是显而易见的。在面试题45圆圈中最后剩下的数字中,我们经过严密的数学分析之后才能找到每次从圆圈中删除的数字的规律,从而找到一种不需要辅助环形链表的快速方法来解决问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论