剑指Offer(java版)
由于本人面试的是Java岗位,而剑指Offer的代码是基于C/C++/C##实现的,所以我将书中的算法用Java语言实现。
每篇md我都将尽量按以下过程书写:
- 题目描述
- 测试用例
- 题目考点
- 解题思路
- 自己解题
- 参考解题
- 补充
- 赋值运算符函数(Java版忽略)
- 实现Singleton模式
- 数组中重复的数字
- 二维数组中的查找
- 替换空格
- 从尾到头打印链表
- 重建二叉树
- 二叉树的下一个节点
- 用两个栈实现队列
- 斐波那契数列
- 旋转数组的最小数字
- 矩阵中的路径
- 机器人的运动范围
- 减绳子
- 二进制中1的个数
- 数值的整数次方
- 打印1到最大的n位数
- 删除链表的节点
- 正则表达式匹配
- 表示数值的字符串
- 调整数组顺序使奇数位于偶数前面
- 链表中倒数第k个节点
- 链表中环的入口节点
- 反转链表
- 合并两个排序的链表
- 树的子结构
- 二叉树的镜像
- 对称的二叉树
- 顺时针打印矩阵
- 包含min函数的栈
- 栈的压入、弹出序列
- 从上到下打印二叉树
- 二叉搜索树的后序遍历序列
- 二叉树中和为某一值的路径
- 复杂链表的复制
- 二叉搜索树与双向链表
- 序列化二叉树
- 字符串的排列
- 数组中出现次数超过一半的数字
- 最小的k个数
- 数据流中的中位数
- 连续子数组的最大和
- 1~n整数中1出现的次数
- 数字序列中某一位的数字
- 把数组排成最小的数
- 把数字翻译成字符串
- 礼物的最大数值
- 最长不含重复字符的子字符串
- 丑数
- 第一个只出现一次的字符
- 数组中的逆序对
- 两个链表的第一个公共节点
- 在排序数组中查找数字
- 二叉搜索树的第k大节点
- 二叉树的深度
- 数组中数字出现的次数
- 和为s的数字
- 翻转字符串
- 队列的最大值
- n个骰子的点数
- 扑克牌中的顺子
- 圆圈中最后剩下的数字
- 股票的最大利润
- 求1+2+...+n
- 不用加减乘除做加法
- 构建乘积数组
- 把字符串转换成整数
- 树中两个节点的最低公共祖先
大部分代码都在对应的markdown中已有呈现,这里也把平时写的代码放在了code目录下,便于使用IDE查看。其中offer2包就代表了面试题2的代码。