服务端、安卓、大数据等几乎所有的软件开发岗都会被问及“数据结构与算法”相关的手写代码题目,为什么这类题目如此广泛而又被高频提问呢?
因为编程的本质就是数据的存储与处理,无论是哪类开发岗都离不开。不仅离不开,而且剥离业务逻辑,从技术角度审视我们的工作,绝大部分都是在做数据处理与算法工作。
很多人被问到此类问题时会有一些紧张,更有甚者直接头脑发蒙,失常发挥,总结原因有二:
实际上绝大部分的此类题目都是有章可循的,只要平时花时间去系统的学习一下,将基础知识掌握牢固,面对这类题目时往往可以很快找到思路,给出答案。
特别说明一点,即便遇见的题目没有见过,也不应该紧张,就类似于高考,几乎所有的题目都没有原题,但仍然可以解答。往往就是新瓶装旧酒而已,比如:关于递归算法的考察就有成百上千种形式。
很多时候,我们可以假设实际工作中遇见了这个问题,那么我们会如何解决呢?我想大部分人都会有解决方案,而一旦在面试中遇见,往往因为紧张、思路错误等原因找不到解决方案,我们不妨假设实际工作中遇见了这个问题,想一想如何解决。
另外,如果实在找不到思路,面试官往往也会给出一些提示,我们应该认真思考和利用面试官给的提示。
当然是有的,只要我们系统的学习,多练习,总会找到一些技巧与感觉,下面列举几个简单的例子;
绝大部分涉及列表相关的题目,只要我们先转为数组,再解决问题,最后转为链表,基本都能快速解决。
很大一部分都是在考察递归算法,先求左子树的结果、再求右子树结果,最后汇总;
或者是变相考察树的几种遍历方式
可以考虑先将数据排序、利用map完成元素到索引的映射等辅助手段解决问题;
肯定是先考虑是否可以使用动态规划解决,找状态转移公式
万金油的算法 - 回溯算法,并且可以借助缓存来优化时间复杂度,几乎可以做到跟动态规划一个量级的时间复杂度。
……
通过系统的学习汇总,将部分技巧与心得简单整理汇总到git项目中(
luckyPT/interview-algorithm),并且会持续在git和头条号更新。欢迎关注;