Files
Learn-Algorithms/9 Algorithms Job Interview
2021-11-15 01:29:08 +08:00
..
2021-08-17 17:39:37 +08:00
2021-09-08 14:00:57 +08:00
2021-09-08 14:00:57 +08:00
2021-09-09 00:37:03 +08:00
2021-09-20 13:28:54 +08:00
2021-09-09 00:21:07 +08:00
2021-09-20 13:28:54 +08:00
2021-09-20 13:28:54 +08:00
2021-09-20 13:28:54 +08:00
2021-09-13 10:42:01 +08:00
2021-09-29 19:20:38 +08:00
2021-09-08 00:45:07 +08:00
2021-09-20 13:28:54 +08:00
2021-09-13 11:36:49 +08:00
2021-11-14 22:42:14 +08:00
2021-09-20 13:28:54 +08:00
2021-11-15 01:20:46 +08:00
2021-09-09 14:25:55 +08:00
2021-10-18 15:59:42 +08:00
2021-09-20 13:28:54 +08:00
2021-11-14 22:42:14 +08:00
2021-09-29 19:20:38 +08:00
2021-11-15 01:29:08 +08:00
2021-11-15 01:20:46 +08:00
2021-11-11 20:00:08 +08:00
2021-11-14 22:42:14 +08:00
2021-09-20 13:28:54 +08:00
2021-09-08 00:45:07 +08:00
2021-09-08 00:45:07 +08:00
2021-09-08 00:45:07 +08:00
2021-09-09 14:25:55 +08:00

面试题

这部分内容是算法问题合集,题目大多来自网络和书籍。我做了下简单的整理,很多题做了一些思路标记。

小结

面试中如何更好的写算法题

  • ide 工具 & 文本框 ;文本框环境写算法是通常没有智能提示,有些基础数据结构可能要自己定义
  • 语言基础语法:各常用集合的api,要能够默写
  • 题目:熟悉各种题目,避免在题目理解上花太多时间跟面试官拉齐
  • 编程思路和框架:拿到题目以后能快速套思路和代码框架
  • 编程细节:多练习,总结

常用解题套路工具

  • 数组,字符串问题:二分查找、 快慢指针、 左右指针、 滑动窗口、 前缀和数组、 差分数组。
  • 二叉树问题:递归
  • 动态规划问题

字符串

计算机处理的数据除了数值,就是字符。字符处理的常见问题包括:

  • 单词反转
  • 回文判断
  • 字符串的压缩
  • 字符串的排列和组合
  • 字符串比较
  • 子串

链表

链表处理的常见问题包括:

  • 链表反转
  • 链表中是否有环
  • 删除链表中的p节点,在p节点前面插入节点q, 要求O(1)复杂度
  • 2个链表相交
  • 2个链表合并

栈和队列

这是最基本数据结构,相对容易理解。

数值问题

这部分都是一些数学几何计算方面的问题。 主要有:

  • 位运算
  • 随机数
  • 大数问题

数组数列问题

这部分的问题都集中在数据集合上。主要有:

  • 数组排序
  • top-k
  • 子数组
  • 多个数组合并,交集

矩阵

这部分都是矩阵和二维数组相关的问题。

二叉树

常见问题

  • 遍历
  • 翻转
  • 子树

解题思路:递归

图

图相关的问题

智力思维训练

刷题框架套路

遍历

# 数组遍历框架
void traverse(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        // 迭代访问 arr[i]
    }
}

# 链表遍历框架
void traverse(ListNode head) {
    for (ListNode p = head; p != null; p = p.next) {
        // 迭代访问 p.val
    }
}

递归

# 链表递归
void traverse(ListNode head) {
    // 递归访问 head.val
    traverse(head.next);
}


# 二叉树递归
void traverse(TreeNode root) {
    traverse(root.left);
    traverse(root.right);
}

# 多叉树递归
void traverse(TreeNode root) {
    for (TreeNode child : root.children)
        traverse(child);
}

# 图的递归:,用个布尔数组 visited 做标记就行了


参考

九度OJ
leetcode 题目
labuladong 的算法小抄
《剑指offer》 《剑指offer》里面给出了50到高质量的算法问题,很有学习的必要。
《编程之美》