面试算法 侧重实践 , 工程 ; 并不是所有的算法都适合面试 , 靠背诵解决问题的算法 , 只能解决单个问题没有推广性的算法 , 有简称 , 带人名的算法 , 这些算法与编程能力关系不大 , 基本面试中不会出现 ; 算法工程师岗位除外 ;
刷题关注点 : 不要乱刷题 , 刷题范围如下 ;
① 算法: 字符串处理 , 排序算法 ( 快速排序 , 归并排序 ) , 双指针算法 , 二分法 , 分治法 , 宽度优先搜索 , 深度优先搜索 , 二叉树遍历 , 动态规划 , 拓扑排序 , 递归 ;
② 数据结构 : 数组 , 链表 , 二叉树 , 堆 , 哈希表 , 线段树 , 树状数组 , 跳跃表 , 红黑树 , 字典树 , 并查集 ; 不同的数据结构 , 增删查改的算法复杂度是不同的 ; 每种数据结构都有其擅长处理的问题 , 如 : 数组方便查询 , 链表方便增删 ;
一些大部头的书 , 如 : 算法导论 , 尽量避免陷进去 , 搞算法研究 , 或算法工程师才去看这些书 , 面试看这些就废了 ;
代码缩进 : 缩进一般 不要超过 3 3 3 层 , 缩进量层次越深 , 出 BUG 几率越高 ; 超过 3 3 3 层的逻辑放在子函数中完成 ;
算法耦合性 : 一个算法如果需要 多个步骤 进行 , 每个步骤之间有交叉重复的情况 , 尽量 将每个步骤抽出放在一个单独的函数中完成 ;
代码注释问题 : 推荐使用 变量 / 方法 清晰易懂的命名 , 逻辑简单易懂 ; 需要一定的编程功底 , 感觉纯属扯淡 , 注释能加还是多加 ;
多拆分代码 : 代码 适当地拆分成子函数 , 拆分的越细 , 子函数越多 , 代码越长 , 但是 代码可读性增强 , 更易于维护 , 出错较少 ;
变量 / 方法名称 :
多重判定 : 多使用 continue 关键字 , 少用 if 关键字 ;
使用空格 :
使用空行 : 一个方法中 , 使用空行分隔不同逻辑模块 ;
异常检测 :
算法面试 :