1、数组
- 找出数组中出现次数大于数组长度一半和 N / K 的数
- 数组的奇偶位置问题:给定一个整型数组,请在原地调整这个数组,保证要么偶数位置上都是偶数,或者奇数位置上都是奇数。
- 调整数组顺序使奇数位于偶数前面
- 数组的度
- 求一个数组中的第 K 小 / 大的数
- 将一个整数数组划分为 K 个相等的子集问题
- 旋转数组中的最小数字
- 在二维数组中查找一个数
- 找出数组中重复的数字
- 找出数组中只出现一次的那个数,其他都出现两次
- 子数组最大累乘积:给定一个 double 类型的数组 arr,其中的元素可正、可负、可 0,返回子数组累乘的最大乘积。
- 需要排序的最短子数组长度
- 最长的可整合子数组的长度
- 最短无序连续子数组
- 连续子数组的最大和
2、字符串
- 字符串的排列与组合
- 最长回文子串
- 正则表达式匹配:实现一个函数用来匹配包括'.'和'*'的正则表达式
- 替换空格
- 字符串的翻转和旋转及其应用
- 字符串解码
- 无重复字符的最长子串
- 字符串的最长公共子串和最长公共子序列
- 请实现一个函数用来判断字符串是否表示数值
- 判断一个字符串是否是一个合法的
3、哈希表
- 手写一个简单的 HashMap
- 和为 K 的子数组:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数
- 一种接收消息并按顺序打印的结构设计
- 哈希表增加 setAll 功能
4、栈
- 用固定大小的数组实现栈
- 如何仅用队列实现栈
- 最小值栈:能够返回栈中最小元素的栈
- 栈的压入、弹出序列:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序
- 单调栈结构的实现
- 直方图中的最大矩形面积
- 求最大子矩阵的大小
- 可见山峰问题
5、队列
- 用固定大小的数组实现队列
- 如何仅用栈结构实现队列
6、链表
- 反转单向链表
- 反转双向链表
- K 个一组翻转链表
- 合并两个排序的链表
- 链表中倒数第 K 个节点
- O(1) 时间内删除一个节点
- 删除链表中重复的节点
- 从尾到头打印链表
- 判断一个链表是否为回文结构
- 给出两个有序链表的头结点,打印出两个链表中相同的元素
- 将单向链表按某值划分成左边小、中间相等、右边大的形式
- 复制含有随机指针节点的链表
- 两个单链表相交的一系列问题
- 链表中环的入口节点
- 复杂链表的复制
7、树
- 二叉树的前序、中序、后序遍历的递归实现
- 二叉树的前序、中序、后序遍历的非递归实现
- 二叉树的层序遍历
- Morris 遍历二叉树:前序、中序、后序
- 输入一个数组,判断是不是二叉搜索树的后序遍历序列
- 二叉树的序列化:前序、层序
- 反序列化:怎么序列化的就怎么反序列化
- 在二叉树中找一个节点的后继节点
- 判断一棵树是否是完全二叉树
- 判断一棵树是否是搜索二叉树
- 判断一棵树是否是平衡二叉树
- 判断一棵树是否是对称的二叉树
- 二叉树的镜像
- 树的子结构:输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构
- 合并二叉树
- 二叉树中和为某一值的路径
- 重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重新构造出该二叉树
- 求一棵完全二叉树的节点个数,时间复杂度低于 O(N)
- 找二叉树左下角的值
- 把二叉搜索树转换为累加树
- 舞会的最大活跃度
- 求一棵二叉树中最大二叉搜索子树的节点个数
- 求一个二叉树的最远距离
- 二叉树的最大路径和
- 求二叉树节点和为 N 的所有路径。
- 实现二叉树的镜像。
- 实现两棵二叉树相加生成一棵新的二叉树。
- 实现单链表的递归逆置和非递归逆置。
- 二分查找变种问题。
- 二叉树的后序非递归遍历。
- 两个无序整型数组交换元素使得两数组和差距最小。
- 给定整型数组和目标数输出数组所有两数之和为目标数的组合。
- 找到带权重二叉树中从根到叶子的最大和路径。
- 最长公共子序列 LCS 问题。
- 二叉树中找到指定两个节点最近公共祖先。
- 实现堆排序求 Top10 数据。
- 实现最小栈。
- 简述并尝试设计一个布隆过滤器。
- 外排序的基本实现过程。
- 常见排序算法的性能对比。
- 快速排序的非递归实现
8. 堆栈
有序数组排序,二分,复杂度 常见排序算法,说下快排过程,时间复杂度 有 N 个节点的满二叉树的高度。1+logN 如何实现关键字输入提示,使用字典树,复杂度多少,有没有其他方案,答哈希,如果是中文呢,分词后建立字典树? hashmap 的实现讲一下吧,讲的很详细了。讲一下红黑树的结构,查询性能等。 快排的时间复杂度,冒泡时间复杂度,快排是否稳定,快排的过程 100w 个数,怎么找到前 1000 个最大的,堆排序,怎么构造,怎么调整,时间复杂度。 一个矩阵,从左上角到右下角,每个位置有一个权值。可以上下左右走,到达右下角的路径权值最小怎么走。 四辆小车,每辆车加满油可以走一公里,问怎么能让一辆小车走最远。说了好几种方案,面试官引导我优化了一下,但是还是不满意,最后他说跳过。 MySQL 的索引,B+树性质。 十亿和数找到前 100 个最大的,堆排序,怎么实现,怎么调整。 布隆过滤器 hash 表解决冲突的方法 跳表插入删除过程 让你实现一个哈希表,怎么做(当时按照 Redis 中哈希表的实现原理回答)