id | 题目 | 语言 | 题解链接 |
---|---|---|---|
03 | 数组中重复的数字 | C++、Java | 题解 |
04 | 二维数组中的查找 | Java、Python | 题解 |
05 | 替换空格 | Java、Python | 题解 |
06 | 从尾到头打印链表 | C++、Python | 题解 |
07 | 重建二叉树 | Java、Python | 题解 |
09 | 用两个栈实现队列 | C++、Python | 题解 |
10-1 | 斐波那契数列 | C++、Python | 题解 |
10-2 | 青蛙跳台阶 | C++、Python | 题解 |
11 | 旋转数组的最小数字 | C++、Python | 题解 |
12 | 矩阵中的路径 | Python | 题解 |
13 | 机器人的运动范围 | Python | 题解 |
14-1 | 剪绳子 | Python | 题解 |
14-2 | 剪绳子(大数取余) | Python | 题解 |
15 | 二进制中1的个数 | Python | 题解 |
16 | 数值的整数次方 | Python | 题解 |
17 | 打印从1到最大的n位数 | Python | 题解 |
18 | 删除链表的节点 | Python | 题解 |
21 | 调整数组使奇数位于偶数前面 | Python | 题解 |
22 | 链表中倒数第k个节点 | Python、Java | 题解 |
24 | 反转链表 | Python、Java | 题解 |
25 | 合并两个有序链表 | Python、Java | 题解 |
27 | 二叉树的镜像 | Python | 题解 |
26 | 树的子结构 | Python | 题解 |
28 | 对称的二叉树 | Python | 题解 |
29 | 顺时针打印矩阵 | Python | 题解 |
30 | 包含min函数的栈 | Python | 题解 |
31 | 栈的压入及弹出序列 | Python | 题解 |
32-1 | 从上到下打印二叉树 | Python | 题解 |
32-2 | 从上到下打印二叉树2 | Python | 题解 |
32-3 | 从上到下打印二叉树3 | Python | 题解 |
33 | 二叉树搜索树的后序遍历序列 | Python | 题解 |
34 | 二叉树中和为某一值的路径 | Python | 题解 |
35 | 复杂链表的复制 | Python | 题解 |
36 | 二叉搜索树与双向链表 | Python | 题解 |
37 | 二叉树的序列化与反序列化 | Python | 题解 |
38 | 字符串的排列 | Python | 题解 |
39 | 数组中出现次数超过一半的数字 | Python | 题解 |
40 | 最小的k个数 | Python | 题解 |
42 | 连续子数组的最大和 | Python | 题解 |
43 | 1~n整数中1出现的次数 | Python | 题解 |
45 | 把数组排成最小的数 | Python | 题解 |
46 | 数字翻译成字符串 | Python | 题解 |
47 | 礼物的最大值 | Python | 题解 |
48 | 最长不重复子串的长度 | Python | 题解 |
49 | 丑数 | Python | 题解 |
50 | 第一个只出现一次的字符 | Python | 题解 |
51 | 数组中的逆序对 | Python | 题解 |
52 | 两个链表的第一个公共结点 | Python | 题解 |
53-1 | 在排序数组中查找数字1 | Python | 题解 |
53-2 | 0~n-1中缺失的数字 | Python | 题解 |
54 | 二叉搜索树的第k大结点 | Python | 题解 |
55-1 | 二叉树的深度 | Python | 题解 |
55-2 | 平衡二叉树 | Python | 题解 |
56-1 | 数组中数字出现的次数 | Python | 题解 |
56-2 | 数组中数字出现的次数2 | Python | 题解 |
57 | 和为s的两个数字 | Python | 题解 |
57-2 | 和为s的连续正数序列 | Python | 题解 |
58-1 | 翻转单词顺序 | Python | 题解 |
58-2 | 左旋转字符串 | Python | 题解 |
59-1 | 滑动窗口的最大值 | Python | 题解 |
59-2 | 队列的最大值 | Python | 题解 |
60 | n个骰子的点数 | Python | 题解 |
61 | 扑克牌中的顺子 | Python | 题解 |
62 | 圆圈中最后剩下的数字 | Python | 题解 |
63 | 股票的最大利润 | Python | 题解 |
64 | 求1+2+...+n | Python | 题解 |
65 | 不用加减乘除做加法 | Java | 题解 |
66 | 构建乘积数组 | Python | 题解 |
67 | 把字符串转换为整数 | Python | 题解 |
68-1 | 二叉搜索树最近公共祖先 | Python | 题解 |
68-2 | 二叉树最近公共祖先 | Python | 题解 |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
1 | 设计一个含有getMin功能的栈 | Python | q1.py |
2 | 由两个栈组成的队列 | Python | q2.py |
3 | 仅用递归函数和栈操作来逆序栈 | Python | q3.py |
4 | 猫狗队列 | Python | q4.py |
5 | 用一个栈实现另一个栈的排序 | Python | q5.py |
7 | 生成窗口最大值数组 | Python | q7.py |
8 | 单调栈问题 | Python | q8.py |
# | 栈和排序 | Python | stackRank.py |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
1 | 打印两个有序链表的公共部分 | Python | q1.py |
2 | 在单链表和双链表中删除倒数第k个结点 | Python | q2.py |
3 | 删除链表的中间节点和a/b处的节点 | Python | q3.py |
4 | 反转单向链表和反转双向链表 | Python | q4.py |
5 | 反转单向链表中第from到to个节点 | Python | q5.py |
6 | 约瑟夫环形链表 | Python | q6.py |
7 | 判断链表是否为回文结构 | Python | q7.py |
9 | 复制含有随机指针的链表 | Python | q9.py |
10 | 两个单链表生成相加链表 | Python | q10.py |
12 | 将单链表的每k个节点之间逆序 | Python | q12.py |
13 | 删除无序单链表中值重复出现的节点 | Python | q13.py |
14 | 删除单链表中指定值的节点 | Python | q14.py |
15 | 搜索二叉树转为有序双向链表 | Python | q15.py |
16 | 单链表的选择排序 | Python | q16.py |
17 | 删除单链表中指定节点 | Python | q17.py |
18 | 向有序单链表插入新节点 | Python | q18.py |
19 | 合并两个有序单链表 | Python | q19.py |
20 | 按照左右半区的方式重新组合单链表 | Python | q20.py |
21 | 单链表的归并排序 | Python | q21.py |
# | 合并K个有序链表 | Python | merge_k_lists.py |
# | 删除链表中重复的元素 | Python | delete_chongfu.py |
# | 判断链表是否有环 | Python | detectCycle_1.py |
# | 链表中环的入口结点 | Python | detectCycle_2.py |
# | 两个链表的第一个公共结点 | Python | detectCycle_3.py |
# | 链表的奇偶重排 | Python | oddeven.py |
# | 重排链表 | Python | headtail.py |
# | 划分链表 | Python | segList.py |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
1 | 递归和非递归实现二叉树先中后序遍历 | Python | q1.py |
2 | 打印二叉树的边界节点 | Python | q2.py |
3 | 直观打印二叉树 | Python | q3.py |
4 | 二叉树的序列化和反序列化 | Python | q4.py |
7 | 找到二叉树中最大的搜索二叉树 | Python | q7.py |
9 | 二叉树的按层打印和ZigZag打印 | Python | q9.py |
10 | 查找搜索二叉树中两个错误的节点 | Python | q10.py |
11 | 判断t1树是否包含t2树全部的拓扑结构 | Python | q11.py |
13 | 判断二叉树是否为平衡二叉树 | Python | q13.py |
14 | 根据后序数组重建搜索二叉树 | Python | q14.py |
15 | 验证搜索二叉树和完全二叉树 | Python | q15.py |
16 | 通过有序数组生成平衡搜索二叉树 | Python | q16.py |
17 | 在二叉树中找到一个节点的后继节点 | Python | q17.py |
18 | 在二叉树中找到两个节点的最近公共祖先节点 | Python | q18.py |
20 | 二叉树节点间的最大距离 | Python | q20.py |
24 | 统计完全二叉树节点的数目 | Python | q24.py |
# | 前序和中序重建二叉树 | Python | rebuild_tree.py |
# | 打印二叉树右视图 | Python | print_right_tree.py |
# | 二叉树深度 | Python | tree_depth.py |
# | 二叉树路径所有代表数字的和 | Python | all_roads_num_sum.py |
# | 二叉树根到叶子节点目标和的路径 | Python | root_leaf_sum.py |
# | 二叉树中是否存在节点和为指定值的路径 | Python | is_root_leaf_sum.py |
# | 二叉树的最大路径和 | Python | max_road_sum.py |
# | 判断二叉树是否对称 | Python | is_duichen.py |
# | 二叉树的镜像 | Python | mirrortree.py |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
2 | 矩阵中的最小路径和 | Python | q2.py |
3 | 换钱的最少货币数 | Python | q3.py |
4 | 机器人到达位置方法数 | Python | q4.py |
7 | 最长递增子序列 | Python | q7.py |
8 | 信封嵌套问题 | Python | q8.py |
9 | 汉诺塔问题 | Python | q9.py |
10 | 最长公共子序列 | Python | q10.py |
11 | 最长公共子串 | Python | q11.py |
13 | 最小编辑代价 | Python | q13.py |
# | 编辑距离 | Python | bjjl.py |
19 | 跳跃游戏 | Python | q19.py |
20 | 数组中最长连续序列 | Python | q20.py |
22 | 最长回文子串 | Python | q22.py |
# | 背包问题 | Python | bag1.py |
# | 最大正方形 | Python | zdzfx.py |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
1 | 顺时针螺旋打印矩阵 | Python | q1.py |
2 | 顺时针旋转矩阵 | Python | q2.py |
5 | 需要排序的最短子数组长度 | Python | q5.py |
7 | 在行列有序矩阵中查找指定数 | Python | q7.py |
8 | 最长的可整合数组的长度 | Python | q8.py |
9 | 打印排序数组中相加和为给定值的二元三元组 | Python | q9.py |
10 | 未排序正数数组中累加和为给定值的最长子数组长度 | Python | q10.py |
11 | 未排序数组中累加和为给定值的最长子数组长度 | Python | q11.py |
14 | 自然数数组的排序 | Python | q14.py |
15 | 奇数下标都是奇数或者偶数下标都是偶数 | Python | q15.py |
16 | 子数组的最大累加和问题 | Python | q16.py |
17 | 子矩阵的最大累加和问题 | Python | q17.py |
18 | 在数组中找到一个局部最小位置 | Python | q18.py |
19 | 数组中子数组的最大累乘积 | Python | q19.py |
22 | 不包含本位置值的累乘数组 | Python | q22.py |
25 | 数组中未出现的最小正整数 | Python | q25.py |
31 | 容器盛水问题 | Python | q31.py |
# | 二分查找目标值(无重复) | Python | efcz1.py |
# | 二分查找第一个等于目标值的下标 | Python | efcz2.py |
# | 二分查找是否存在和为目标值的两个数 | Python | efcz3.py |
# | 合并两个有序数组 | Python | merge2arr.py |
# | 螺旋矩阵 | Python | lxmatrix.py |
# | 升序数组中数字出现的次数 | Python | numcishu.py |
# | 相加和为0的三元组 | Python | threenum.py |
# | 转动过的数组中查找目标值 | Python | bstarget.py |
# | 在行列有序矩阵中查找指定数2 | Python | maserch.py |
# | 数组中未出现的最小正整数 | Python | mindisappear.py |
# | 矩阵最长递增路径 | Python | jzzcdzlj.py |
# | 旋转数组 | Python | xzsz.py |
# | 矩阵乘法 | Python | jzcf.py |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
7 | 岛屿的个数 | Python | q7.py |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
6 | 在其它数都出现k次的数组中找到只出现1次的数 | Python | q6.py |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
1 | 判断两个字符串是否为变形词 | Python | q1.py |
2 | 判断两个字符串是否互为旋转词 | Python | q2.py |
3 | 将整数字符串转为整数值 | Python | q3.py |
4 | 字符串的统计字符串 | Python | q4.py |
5 | 判断字符数组中是否所有的字符都只出现过一次 | Python | q5.py |
6 | 在有序但有空的数组中查找字符串 | Python | q6.py |
7 | 字符串的调整与替换 | Python | q7.py |
8 | 翻转字符串 | Python | q8.py |
10 | 删除多余字符得到字典序最小的字符串 | Python | q10.py |
11 | 数组中两个字符串的最小距离 | Python | q11.py |
19 | 拼接所有字符串产生字典顺序最小的字符串 | Python | q19.py |
20 | 字符串中最长不重复子串长度 | Python | q20.py |
26 | 字典树(前缀树)的实现 | Python | q26.py |
# | 字符串数组最长公共前缀 | Python | strarrqz.py |
# | 两个字符串代表的整数相加 | Python | strsum.py |
# | 字符串逆置大小写转换 | Python | strtrans.py |
# | 字符串出现的TopK问题 | Python | strTopk.py |
# | 比较版本号 | Python | compare_ver.py |
# | 最长重复子串 | Python | most_repeat_str.py |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
11 | 设计LRU缓存结构 | Python | q11.py |
29 | 在两个长度相等的排序数组中找到上中位数 | Python | q29.py |
32 | 出现次数的TopK问题 | Python | q32.py |
# | 堆排序 | Python | heap.py |
# | 快速排序 | Python | quick.py |
# | 最小k个数 | Python | small_K.py |
# | 10进制转N进制 | Python | 10toN.py |
# | 求平方根 | Python | sqrt.py |
# | 加起来为目标值的组合数 | Python | target_zh.py |
# | 括号序列 | Python | khxl.py |
# | 括号生成 | Python | khsc.py |
# | 翻转数字 | Python | fzsz.py |
# | 合并区间 | Python | hbqj.py |
# | 缺失数字 | Python | qssz.py |
# | 股票(一次交易) | Python | gupiao1.py |
# | 股票(两次交易) | Python | gupiao2.py |
# | 股票(无限次交易) | Python | gupiao3.py |
# | 股票(k次交易) | Python | gupiao4.py |
# | 股票(含冷冻期) | Python | gupiao5.py |
# | 股票(含手续费) | Python | gupiao6.py |
# | 寻找峰值 | Python | xzfz.py |
# | 整数集合的子集 | Python | zj.py |
# | 二叉搜索树转为排序双向列表 | Python | bstree2list.py |
# | 比特位计数 | Python | btnum.py |
# | 二分查找 | Python | bisearch.py |
# | 大数加法 | Python | bigAdd.py |
# | 最大公约数 | Python | maxGys.py |
# | 最长连续相同字符子串长度 | Python | max_same_str.py |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
2 | 两数相加 | Python | 2.py |
3 | 无重复字符的最长子串 | Python | 3.py |
5 | 最长回文子串 | Python | 5.py |
12 | 整数转罗马数字 | Python | 12.py |
17 | 电话号码的字母组合 | Python | 17.py |
19 | 删除链表的倒数第n个结点 | Python | 19.py |
21 | 合并两个有序链表 | Python | 21.py |
22 | 括号生成 | Python | 22.py |
23 | 合并K个升序链表 | Python | 23.py |
31 | 下一个排列* | Python | 31.py |
32 | 最长有效括号 | Python | 32.py |
33 | 搜索旋转排序数组 | Python | 33.py |
34 | 在排序数组中查找元素的第一个和最后一个位置 | Python | 34.py |
39 | 组合总和 | Python | 39.py |
40 | 组合总和II | Python | 40.py |
46 | 全排列 | Python | 46.py |
48 | 旋转图像 | Python | 48.py |
49 | 字母异位词 | Python | 49.py |
53 | 最大子序和 | Python | 53.py |
55 | 跳跃游戏 | Python | 55.py |
56 | 合并区间 | Python | 56.py |
62 | 不同路径 | Python | 62.py |
64 | 最小路径和 | Python | 64.py |
70 | 爬楼梯 | Python | 70.py |
75 | 颜色分类 | Python | 75.py |
78 | 子集 | Python | 78.py |
79 | 单词搜索 | Python | 79.py |
81 | 搜索旋转排序数组2 | Python | 81.py |
94 | 树的中序遍历 | Python | 94.py |
96 | 不同的二叉搜索树 | Python | 96.py |
98 | 验证二叉搜索树 | Python | 98.py |
101 | 对称二叉树 | Python | 101.py |
102 | 二叉树的层次遍历 | Python | 102.py |
104 | 二叉树的最大深度 | Python | 104.py |
105 | 从前序和中序遍历序列构建二叉树 | Python | 105.py |
108 | 将有序数组转换为二叉搜索树 | Python | 108.py |
114 | 二叉树展开为链表* | Python | 114.py |
121 | 买卖股票的最佳时机 | Python | 121.py |
128 | 最长连续序列 | Python | 128.py |
136 | 只出现一次的数字 | Python | 136.py |
139 | 单词拆分 | Python | 139.py |
141 | 环形链表 | Python | 141.py |
142 | 环形链表的环形入口结点 | Python | 142.py |
148 | 排序链表 | Python | 148.py |
152 | 乘积最大子数组 | Python | 152.py |
155 | 最小栈 | Python | 155.py |
160 | 相交链表 | Python | 160.py |
169 | 多数元素 | Python | 169.py |
198 | 打家劫舍 | Python | 198.py |
200 | 岛屿数量 | Python | 200.py |
206 | 反转链表 | Python | 206.py |
207 | 课程表 | Python | 207.py |
208 | 前缀树 | Python | 208.py |
213 | 打家劫舍2 | Python | 213.py |
215 | 数组中的第K个最大元素 | Python | 215.py |
221 | 最大正方形 | Python | 221.py |
226 | 翻转二叉树 | Python | 226.py |
234 | 回文链表 | Python | 234.py |
236 | 二叉树最近公共祖先节点 | Python | 236.py |
238 | 除自身以外数组的乘积* | Python | 338.py |
240 | 搜索二维矩阵2 | Python | 240.py |
279 | 完全平方数 | Python | 279.py |
283 | 移动零 | Python | 283.py |
297 | 二叉树的序列化与反序列化 | Python | 297.py |
300 | 最长递增子序列 | Python | 300.py |
309 | 股票(含冷冻期) | Python | 309.py |
332 | 零钱兑换 | Python | 332.py |
337 | 打家劫舍3 | Python | 337.py |
338 | 比特位计数 | Python | 338.py |
394 | 字符串解码 | Python | 394.py |
399 | 除法求值 | Python | 399.py |
406 | 根据身高重建队列 | Python | 406.py |
416 | 分割等和子集 | Python | 416.py |
437 | 路径总和3 | Python | 437.py |
438 | 找到字符串中的所有字母异位词 | Python | 438.py |
448 | 找到所有数组中消失的数字 | Python | 448.py |
461 | 汉明距离 | Python | 461.py |
538 | 把二叉搜索树转为累加树 | Python | 538.py |
543 | 二叉树的直径 | Python | 543.py |
560 | 和为k的子数组 | Python | 560.py |
581 | 最短无序连续子数组 | Python | 543.py |
617 | 合并二叉树 | Python | 617.py |
647 | 回文子串 | Python | 617.py |
739 | 每日温度 | Python | 739.py |
id | 题目 | 语言 | 题解链接 |
---|---|---|---|
1 | 两数之和 | C++ | 题解笔记 |
7 | 整数反转 | Java | 题解笔记 |
9 | 回文数 | Java | 题解笔记 |
13 | 罗马数字转数字 | Java | 题解笔记 |
14 | 最长公共前缀 | Java | 题解笔记 |
20 | 有效的括号 | Java | 题解笔记 |
21 | 合并两个有序链表 | Java | 题解笔记 |
26 | 删除排序数组中的重复项 | Java | 题解笔记 |
27 | 移除元素 | Java | 题解笔记 |
35 | 搜索插入位置 | Java | 题解笔记 |
38 | 报数 | Java | 题解笔记 |
41 | 缺失的第一个正数 | Python | 41.py |
50 | Pow(x,n) | Python | 题解笔记 |
38 | 报数 | Java | 题解笔记 |
53 | 最大子序和 | Java | 题解笔记 |
54 | 顺时针打印矩阵 | Python | 题解笔记 |
58 | 最后一个单词的长度 | Java | 题解笔记 |
66 | 加一 | Java | 题解笔记 |
67 | 二进制求和 | Java | 题解笔记 |
69 | x的平方根 | Java | 题解笔记 |
70 | 爬楼梯 | Java | 题解笔记 |
79 | 单词搜索 | Python | 题解笔记 |
83 | 删除排序链表中的重复元素 | Java | 题解笔记 |
88 | 合并两个有序数组 | Java | 题解笔记 |
100 | 相同的树 | Java | 题解笔记 |
101 | 对称二叉树 | Java | 题解笔记 |
102 | 二叉树的层次遍历 | Python | 题解笔记 |
105 | 根据前序和中序重建二叉树 | Java、Python | 题解笔记 |
107 | 二叉树的层次遍历 II | Java | 题解笔记 |
108 | 将有序数组转换为二叉搜索树 | Java | 题解笔记 |
110 | 平衡二叉树 | Java | 题解笔记 |
121 | 股票的最大利润 | Python | 题解笔记 |
136 | 只出现一次的数字 | Python | 题解笔记 |
141 | 判断链表中是否有环 | Python | 题解笔记 |
143 | 重排链表 | Python | 143.py |
151 | 翻转字符串的单词 | Python | 题解笔记 |
155 | 最小栈 | Python | 题解笔记 |
160 | 相交链表 | Python | 题解笔记 |
169 | 多数元素 | Python | 题解笔记 |
191 | 位1的个数 | Python | 题解笔记 |
226 | 翻转二叉树 | Python | 题解笔记 |
235 | 二叉搜索树最近公共祖先 | Python | 题解笔记 |
260 | 只出现一次的数字 III | Python | 题解笔记 |
264 | 丑数2 | Python | 题解笔记 |
343 | 整数拆分 | Python | 题解笔记 |
470 | 用Rand7()实现Rand10() | Python | 470.py |
645 | 错误的集合 | Python | 题解笔记 |
946 | 验证栈序列 | Python | 题解笔记 |
994 | 腐烂的橘子 | Python | 994.py |
排序算法 | 平均时间复杂度 | 最差时间复杂度 | 空间复杂度 | 数据对象稳定性 |
---|---|---|---|---|
冒泡排序 | O(n2) | O(n2) | O(1) | 稳定 |
选择排序 | O(n2) | O(n2) | O(1) | 数组不稳定、链表稳定 |
插入排序 | O(n2) | O(n2) | O(1) | 稳定 |
快速排序 | O(n*log2n) | O(n2) | O(log2n) | 不稳定 |
堆排序 | O(n*log2n) | O(n*log2n) | O(1) | 不稳定 |
归并排序 | O(n*log2n) | O(n*log2n) | O(n) | 稳定 |
希尔排序 | O(n*log2n) | O(n2) | O(1) | 不稳定 |
计数排序 | O(n+m) | O(n+m) | O(n+m) | 稳定 |
桶排序 | O(n) | O(n) | O(m) | 稳定 |
基数排序 | O(k*n) | O(n2) | 稳定 |
- 均按从小到大排列
- k:代表数值中的 “数位” 个数
- n:代表数据规模
- m:代表数据的最大值减最小值
- 牛客
- leetcode
- codetop