面试攻略:如何轻松应对“数据结构与算法”问题

发表时间: 2019-12-25 22:57

为什么会被频繁问及“数据结构与算法

服务端、安卓、大数据等几乎所有的软件开发岗都会被问及“数据结构与算法”相关的手写代码题目,为什么这类题目如此广泛而又被高频提问呢?

因为编程的本质就是数据的存储与处理,无论是哪类开发岗都离不开。不仅离不开,而且剥离业务逻辑,从技术角度审视我们的工作,绝大部分都是在做数据处理与算法工作。

如何客观的认识与对待面试中的“手写代码”题目

很多人被问到此类问题时会有一些紧张,更有甚者直接头脑发蒙,失常发挥,总结原因有二:

  1. 基础知识掌握的不够扎实

实际上绝大部分的此类题目都是有章可循的,只要平时花时间去系统的学习一下,将基础知识掌握牢固,面对这类题目时往往可以很快找到思路,给出答案。

特别说明一点,即便遇见的题目没有见过,也不应该紧张,就类似于高考,几乎所有的题目都没有原题,但仍然可以解答。往往就是新瓶装旧酒而已,比如:关于递归算法的考察就有成百上千种形式。

  1. 没有以“平常心”去对待

很多时候,我们可以假设实际工作中遇见了这个问题,那么我们会如何解决呢?我想大部分人都会有解决方案,而一旦在面试中遇见,往往因为紧张、思路错误等原因找不到解决方案,我们不妨假设实际工作中遇见了这个问题,想一想如何解决。

另外,如果实在找不到思路,面试官往往也会给出一些提示,我们应该认真思考和利用面试官给的提示。



有没有一些解题技巧帮助我们快速提升水平

当然是有的,只要我们系统的学习,多练习,总会找到一些技巧与感觉,下面列举几个简单的例子;

  • 列表相关的题目

绝大部分涉及列表相关的题目,只要我们先转为数组,再解决问题,最后转为链表,基本都能快速解决。

  • 决策树相关的题目

很大一部分都是在考察递归算法,先求左子树的结果、再求右子树结果,最后汇总;

或者是变相考察树的几种遍历方式

  • 关于数组

可以考虑先将数据排序、利用map完成元素到索引的映射等辅助手段解决问题;

  • 关于最优解问题

肯定是先考虑是否可以使用动态规划解决,找状态转移公式

  • 搜索查找类的问题

万金油的算法 - 回溯算法,并且可以借助缓存来优化时间复杂度,几乎可以做到跟动态规划一个量级的时间复杂度。

……


如何Get这些技巧

通过系统的学习汇总,将部分技巧与心得简单整理汇总到git项目中(
luckyPT/interview-algorithm),并且会持续在git和头条号更新。欢迎关注;