算法学习(二、算法面试问题的整体思路)

254 阅读1分钟

一、算法面试的准备范围

基础算法和数据结构

  • 排序算法
  • 基础数据结构和算法的实现:如堆、二叉树、图
  • 基础数据结构的使用:如链表、栈、队列、哈希表、图、Trie、并查集...
  • 基础算法:深度优先、广度优先、二分查找、递归...
  • 基本算法思想:递归、分治、回溯搜索、贪心、动态规划...

二、解决算法面试问题的整体思路

1、阅读题目

a、当有条件提示时

  • 给定有序数组
    • 二分查找?
  • 有些题目的条件本身就是暗示
    • 设计一个O(nlog(n))的算法
      • 分治
      • 树排序
  • 无需考虑额外的空间
    • 考虑开辟额外空间
  • 数据规模大概是10000
    • O(n2)

b、当没有思路时

  • 利用简单的数据测试用例试验一下
  • 不要忽视暴力解法,暴力解法通常是思考的起点
    • 暴力 -> 优化

2、算法优化:

  • 遍历常见的算法思路:
    • 索引指针
    • 递归
    • 分治
    • 贪心
    • 动态规划
  • 遍历常见的数据结构(复杂算法的辅助)
    • 队列
  • 常规思路
    • 空间换时间(哈希表)
    • 数据预处理(排序)
  • 在瓶颈处寻找答案
    • 如:O(nlogn) 预处理 + O(n^2) 数据处理;O(n^3),通常都是在复杂度高的部分进行优化,即在瓶颈处优化。

3、实际编写

  • 极端条件的判断

    • 数组为空?字符串为空?数量为0?指针为NULL? -> 代码健壮性
  • 变量名

  • 模块化、复用性