前言
2018年10月购买的《剑指Offer(第二版)》,平常课业较为繁重,寒假是个刷题的好时间,自己前前后后用了一周的时间刷完了剑指上除了与"树"相关的题目,累计64道面试题,其中包括书上没有给出算法的相关题目;有些题,之前已经做过了多次,整体来说,还是有很大的收获的。编程能力除了必备了语言基础外,刷题是可以有很大提高的,剑指刷完后,用了3天时间刷完了LeetCode上的初级算法题目,还有中级、高级和腾讯精选,接下来会坚持刷下去。
源码地址
Github项目:https://github.com/YBZMZM/Coding-Interviews
题目分类
没有按照书上的分类来进行,将题目按照题型整理分类如下:
数组(Array)
ID | Title |
---|
3-1 | 数组中重复的数字 |
3-2 | 不修改数组找出重复的数字 |
4 | 二维数组中的查找 |
10 | 斐波那契数列 |
11 | 旋转数组的最小数字 |
21 | 调整数组顺序使奇数位于偶数前面 |
29 | 顺时针打印矩阵 |
39 | 数组中出现次数超过一半的数字 |
40 | 最小的k个数 |
42 | 连续子数组的最大和 |
45 | 把数组排成最小的数 |
51 | 数组中的逆序对 |
53-1 | 在排序数组中查找数字 |
53-2 | 0到n-1中缺失的数字 |
53-3 | 数组中数值和下标相等的元素 |
56-1 | 数组中只出现一次的两个数字 |
56-2 | 数组中唯一只出现一次的数字 |
57-1 | 和为s的两个数字 |
57-2 | 和为s的连续正数序列 |
66 | 构建乘积数组 |
字符串(String)
ID | Title |
---|
5 | 替换空格 |
19 | 正则表达式匹配 |
20 | 表示数值的字符串 |
38 | 字符串的排列 |
48 | 最长不含重复字符的子字符串 |
50-1 | 第一个只出现一次的字符 |
50-2 | 删除第二个字符串的所有字符 |
50-3 | 删除字符串中所有重复的字符 |
50-4 | 判断变位词 |
58-1 | 翻转单词顺序 |
58-2 | 左旋转字符串 |
67 | 把字符串转换成整数 |
链表(LinkList)
ID | Title |
---|
6 | 从尾到头打印链表 |
18-1 | 删除链表的节点 |
18-2 | 删除链表中的重复节点 |
22 | 链表中倒数第k个节点 |
23 | 链表中环的入口节点 |
24 | 反转链表 |
25 | 合并两个排序的链表 |
35 | 复杂链表的复制 |
52 | 两个链表的第一个公共节点 |
62 | 圆圈中最后剩下的数字 |
栈和队列(Stack & Queue)
ID | Title |
---|
9-1 | 用两个栈实现队列 |
9-2 | 用两个队列实现栈 |
30 | 包含min函数的栈 |
31 | 栈的压入、弹出序列 |
59-1 | 滑动窗口的最大值 |
59-2 | 队列的最大值 |
数学(Math)
ID | Title |
---|
15 | 二进制中1的个数 |
16 | 数值的整数次方 |
17 | 打印从1到最大的n位数 |
43 | 1~n整数中1出现的次数 |
44 | 数字序列中某一位的数字 |
46 | 把数字翻译成字符串 |
49 | 丑数 |
61 | 扑克牌中的顺子 |
63 | 股票的最大利润 |
64 | 求1+2+…+n |
65 | 不用加减乘除做加法 |
回溯法(Backtracking)
ID | Title |
---|
12 | 矩阵中的路径 |
13 | 机器人的运动范围 |
动态规划(Dynamic Programming)
ID | Title |
---|
14 | 剪绳子 |
47 | 礼物的最大价值 |
60 | n个骰子的点数 |