记录LeetCode、牛客网、部分OJ上各种算法题的解法,尽可能的对每道题实现多种解法,展现在过程中解题思路。使用Java和Python两种语言编写题解,力求得心应手。(本项目只包含题解代码,如有精彩的题目将同步更新题解说明文章到
所有引用内容均为学习使用,如若冒犯或侵权,立即删改
老的目录结构可查看这里
- 项目启动:需要在Python环境下启动
# 单线程启动
python server.py runserver
# 多线程启动
gunicorn server:app -c gunicorn.conf.py
# shell指令启动
sh run.sh
- core目录下存放着核心的代码实现、题目、题解等,根据题目类别进行归类,其下面的tmp目录请忽略(保留的旧版本代码)
- 代码目录最好使用英文命名,且其下的cpp、java、py、md文件必须与目录同命名,否则不会被解析到configs.json中,题解的md文件命名为在目录命名后加"_solution"示例:
TheSumOfTheTwoNumbers 题目所在目录
----TheSumOfTheTwoNumbers.cpp 题目C++解法
----TheSumOfTheTwoNumbers.java 题目Java解法
----TheSumOfTheTwoNumbers.py 题目Python解法
----TheSumOfTheTwoNumbers.md 题目
----TheSumOfTheTwoNumbers_solution.md 题目解法
- configs.json在启动时自动生成(更新),生成可视化界面相关数据(这样有利于加速访问,而不必每次访问时处理)。生成的可视化界面菜单是根据题目的md文件(譬如上述的TheSumOfTheTwoNumbers.md)配置生成的,并不是根据目录结构生成,配置规则如下:
$=title=$: 标题
$=class=$: 分类
$=origin=$: 题目来源
$=degree=$: 题目难度,Hard/Medium/Easy
$=link=$: 题目原题链接
1.有序数组中的单一元素(Java解法 | Python解法):题目难度(中等),题目类型(数组_二分查找)
2.矩阵中的幸运数(Java解法 | Python解法):题目难度(简单),题目类型(数组_矩阵)
3.适合打劫银行的日子(Java解法 | Python解法):题目难度(中等),题目类型(数组_动态规划_前缀和)
4.最长特殊序列 Ⅰ(Java解法 | Python解法):题目难度(简单),题目类型(字符串)
5.最长特殊序列 II(Java解法 | Python解法):题目难度(中等),题目类型(数组_哈希表_双指针_字符串_排序)
6.七进制数(Java解法 | Python解法):题目难度(简单),题目类型(数学)
7.子数组范围和(Java解法 | Python解法):题目难度(中等),题目类型(栈_数组_单调栈)
8.蜡烛之间的盘子(Java解法 | Python解法):题目难度(中等),题目类型(数组_字符串_二分查找_前缀和)
9.各位相加(Java解法 | Python解法):题目难度(简单),题目类型(数学_数论_模拟)
10.快乐数(Java解法 | Python解法):题目难度(简单),题目类型(哈希表_数学_双指针)
11.得分最高的最小轮调(Java解法 | Python解法):题目难度(困难),题目类型(数组_前缀和)
12.N 叉树的前序遍历(Java解法 | Python解法):题目难度(简单),题目类型(栈_树_深度优先搜索)
13.二叉树的前序遍历(Java解法 | Python解法):题目难度(简单),题目类型(栈_树_深度优先搜索_二叉树)
14.二叉树的中序遍历(Java解法 | Python解法):题目难度(简单),题目类型(栈_树_深度优先搜索_二叉树)
15.二叉树的后序遍历(Java解法 | Python解法):题目难度(简单),题目类型(栈_树_深度优先搜索_二叉树)
16.N 叉树的后序遍历(Java解法 | Python解法):题目难度(简单),题目类型(栈_树_深度优先搜索)
17.N 叉树的层序遍历(Java解法 | Python解法):题目难度(中等),题目类型(树_广度优先搜索)
18.统计最高分的节点数目(Java解法 | Python解法):题目难度(中等),题目类型(树_深度优先搜索_数组_二叉树)
19.寻找最近的回文数(Java解法 | Python解法):题目难度(困难),题目类型(数学_字符串)
20.Z 字形变换(Java解法 | Python解法):题目难度(中等),题目类型(字符串)
21.UTF-8 编码验证(Java解法 | Python解法):题目难度(中等),题目类型(位运算_数组)
22.最多可达成的换楼请求数目(Java解法 | Python解法):题目难度(困难),题目类型(位运算_数组_回溯_枚举)
23.两个列表的最小索引总和(Java解法 | Python解法):题目难度(简单),题目类型(数组_哈希表_字符串)
24.相交链表(Java解法 | Python解法):题目难度(简单),题目类型(哈希表_链表_双指针)
25.统计按位或能得到最大值的子集数目(Java解法 | Python解法):题目难度(中等),题目类型(位运算_数组_回溯)
26.最优除法(Java解法 | Python解法):题目难度(中等),题目类型(数组_数学_动态规划)
27.增量元素之间的最大差值(Java解法 | Python解法):题目难度(简单),题目类型(数组)
28.复数乘法(Java解法 | Python解法):题目难度(中等),题目类型(数学_字符串_模拟)
29.全 O(1) 的数据结构(Java解法 | Python解法):题目难度(困难),题目类型(设计_哈希表_链表_双向链表)
30.球会落何处(Java解法 | Python解法):题目难度(中等),题目类型(深度优先搜索_数组_动态规划_矩阵_模拟)
31.仅仅反转字母(Java解法 | Python解法):题目难度(简单),题目类型(双指针_字符串)
32.计数质数(Java解法 | Python解法):题目难度(中等),题目类型(数组_数学_枚举_数论)
33.词典中最长的单词(Java解法 | Python解法):题目难度(简单),题目类型(字典树_数组_哈希表_字符串_排序)
34.通过删除字母匹配到字典里最长单词(Java解法 | Python解法):题目难度(中等),题目类型(数组_双指针_字符串_排序)
35.实现一个魔法字典(Java解法 | Python解法):题目难度(中等),题目类型(设计_字典树_哈希表_字符串)
36.简易银行系统(Java解法 | Python解法):题目难度(中等),题目类型(设计_数组_哈希表_模拟)
37.学生分数的最小差值(Java解法 | Python解法):题目难度(简单),题目类型(数组_排序_滑动窗口)
38.根据二叉树创建字符串(Java解法 | Python解法):题目难度(简单),题目类型(树_深度优先搜索_字符串_二叉树)
39.寻找重复的子树(Java解法 | Python解法):题目难度(中等),题目类型(树_深度优先搜索_哈希表_二叉树)
40.最长的美好子字符串(Java解法 | Python解法):题目难度(简单),题目类型(位运算_哈希表_字符串_滑动窗口)
41.至少有 K 个重复字符的最长子串(Java解法 | Python解法):题目难度(中等),题目类型(哈希表_字符串_分治_滑动窗口)
42.网络空闲的时刻(Java解法 | Python解法):题目难度(中等),题目类型(广度优先搜索_图_数组)
43.切棍子的最小成本(Java解法 | Python解法):题目难度(困难),题目类型(数组_动态规划)
44.两数之和 IV - 输入 BST(Java解法 | Python解法):题目难度(简单),题目类型(树_深度优先搜索_广度优先搜索_二叉搜索树_哈希表_双指针_二叉树)
45.两数之和(Java解法 | Python解法):题目难度(简单),题目类型(数组_哈希表)
46.如果相邻两个颜色均相同则删除当前颜色(Java解法 | Python解法):题目难度(中等),题目类型(贪心_数学_字符串_博弈)
46.字符串的最大公因子(Java解法 | Python解法):题目难度(简单),题目类型(数学_字符串)
47.两数相加(Java解法 | Python解法):题目难度(中等),题目类型(递归_链表_数学)
48.字典序的第K小数字(Java解法 | Python解法):题目难度(困难),题目类型(字典树)
49.反转链表(Java解法 | Python解法):题目难度(简单),题目类型(递归_链表)
50.无重复字符的最长子串(Java解法 | Python解法):题目难度(中等),题目类型(哈希表_字符串_滑动窗口)
51.图片平滑器(Java解法 | Python解法):题目难度(简单),题目类型(数组_矩阵)
52.LRU 缓存(Java解法 | Python解法):题目难度(中等),题目类型(设计_哈希表_链表_双向链表)
53.数组中的第K个最大元素(Java解法 | Python解法):题目难度(中等),题目类型(数组_分治_快速选择_排序_堆(优先队列))
54.阶乘后的零(Java解法 | Python解法):题目难度(中等),题目类型(数学)
55.K 个一组翻转链表(Java解法 | Python解法):题目难度(困难),题目类型(递归_链表)
56.三数之和(Java解法 | Python解法):题目难度(中等),题目类型(数组_双指针_排序)
57.棒球比赛(Java解法 | Python解法):题目难度(简单),题目类型(栈_数组_模拟)
58.排序数组(Java解法 | Python解法):题目难度(中等),题目类型(数组_分治_桶排序_计数排序_快速排序_堆排序_归并排序)
59.找出缺失的观测数据(Java解法 | Python解法):题目难度(中等),题目类型(数组_数学_模拟)
60.最大子数组和(Java解法 | Python解法):题目难度(简单),题目类型(数组_分治_动态规划)
61.合并两个有序链表(Java解法 | Python解法):题目难度(简单),题目类型(递归_链表)
62.二叉树的层序遍历(Java解法 | Python解法):题目难度(中等),题目类型(数_广度优先搜索_二叉树)
63.环形链表(Java解法 | Python解法):题目难度(简单),题目类型(哈希表_链表_双指针)
64.买卖股票的最佳时机(Java解法 | Python解法):题目难度(简单),题目类型(数组_动态规划)
65.二叉树的锯齿形层序遍历(Java解法 | Python解法):题目难度(中等),题目类型(数_广度优先搜索_二叉树)
66.合并两个有序数组(Java解法 | Python解法):题目难度(简单),题目类型(数组_双指针_排序)
67.有效的括号(Java解法 | Python解法):题目难度(简单),题目类型(栈_字符串)
68.交替位二进制数(Java解法 | Python解法):题目难度(简单),题目类型(位运算)
69.二叉树的最近公共祖先(Java解法 | Python解法):题目难度(中等),题目类型(数_深度优先搜索_二叉树)
70.最长回文子串(Java解法 | Python解法):题目难度(中等),题目类型(字符串_动态规划)
71.搜索旋转排序数组(Java解法 | Python解法):题目难度(中等),题目类型(数组_二分查找)
72.考试的最大困扰度(Java解法 | Python解法):题目难度(中等),题目类型(字符串_二分查找_前缀和_滑动窗口)
73.岛屿数量(Java解法 | Python解法):题目难度(中等),题目类型(深度优先搜索_广度优先搜索_并查集_数组_矩阵)
74.全排列(Java解法 | Python解法):题目难度(中等),题目类型(数组_回溯)
75.字符串相加(Java解法 | Python解法):题目难度(简单),题目类型(数学_字符串_模拟)
76.找到处理最多请求的服务器(Java解法 | Python解法):题目难度(困难),题目类型(贪心_数组_有序集合_堆(优先队列))
77.合并K个升序链表(Java解法 | Python解法):题目难度(困难),题目类型(链表_分治_堆(优先队列)_归并排序)
78.自除数(Java解法 | Python解法):题目难度(简单),题目类型(数学)
79.反转链表 II(Java解法 | Python解法):题目难度(中等),题目类型(链表)
80.螺旋矩阵(Java解法 | Python解法):题目难度(中等),题目类型(数学_矩阵_模拟)
81.二倍数对数组(Java解法 | Python解法):题目难度(中等),题目类型(贪心_数组_哈希表_排序)
82.最长递增子序列(Java解法 | Python解法):题目难度(中等),题目类型(数组_二分查找_动态规划)
83.接雨水(Java解法 | Python解法):题目难度(困难),题目类型(栈_数组_双指针_动态规划_单调栈)
84.二分查找(Java解法 | Python解法):题目难度(简单),题目类型(数组_二分查找)
85.重排链表(Java解法 | Python解法):题目难度(中等),题目类型(栈_递归_链表_双指针)
86.强密码检验器(Java解法 | Python解法):题目难度(困难),题目类型(贪心_字符串_堆(优先队列))
87.用栈实现队列(Java解法 | Python解法):题目难度(简单),题目类型(栈_设计_队列)
88.二叉树中的最大路径和(Java解法 | Python解法):题目难度(困难),题目类型(树_深度优先搜索_动态规划_二叉树)
89.二叉树的右视图(Java解法 | Python解法):题目难度(中等),题目类型(树_深度优先搜索_广度优先搜索_二叉树)
90.爬楼梯(Java解法 | Python解法):题目难度(简单),题目类型(记忆化搜索_数学_动态规划)
91.最小高度树(Java解法 | Python解法):题目难度(中等),题目类型(深度优先搜索_广度优先搜索_图_拓扑排序)
92.旋转字符串(Java解法 | Python解法):题目难度(简单),题目类型(字符串_字符串匹配)
93.到达终点(Java解法 | Python解法):题目难度(困难),题目类型(数学)
93.搜索旋转排序数组 II(Java解法 | Python解法):题目难度(中等),题目类型(数组_二分查找)
94.寻找旋转排序数组中的最小值(Java解法 | Python解法):题目难度(中等),题目类型(数组_二分查找)
95.删除链表的倒数第 N 个结点(Java解法 | Python解法):题目难度(中等),题目类型(链表_双指针)
96.x 的平方根(Java解法 | Python解法):题目难度(简单),题目类型(数学_二分查找)
97.删除排序链表中的重复元素 II(Java解法 | Python解法):题目难度(中等),题目类型(链表_双指针)
98.唯一摩尔斯密码词(Java解法 | Python解法):题目难度(简单),题目类型(数组_哈希表_字符串)
99.合并区间(Java解法 | Python解法):题目难度(中等),题目类型(数组_排序)
100.编辑距离(Java解法 | Python解法):题目难度(中等),题目类型(数组_排序)
101.寻找两个正序数组的中位数(Java解法 | Python解法):题目难度(困难),题目类型(数组_二分查找_分治)
102.统计各位数字都不同的数字个数(Java解法 | Python解法):题目难度(中等),题目类型(数学_动态规划_回溯)
103.字符串转换整数 (atoi)(Java解法 | Python解法):题目难度(中等),题目类型(字符串)
104.排序链表(Java解法 | Python解法):题目难度(中等),题目类型(链表_双指针_分治_排序_归并排序)
105.写字符串需要的行数(Java解法 | Python解法):题目难度(简单),题目类型(数组_字符串)
106.链表中倒数第k个节点(Java解法 | Python解法):题目难度(简单),题目类型(链表_双指针)
107.最长公共子序列(Java解法 | Python解法):题目难度(中等),题目类型(字符串_动态规划)
108.括号生成(Java解法 | Python解法):题目难度(中等),题目类型(字符串_动态规划_回溯)
109.O(1) 时间插入、删除和获取随机元素(Java解法 | Python解法):题目难度(中等),题目类型(设计_数组_哈希表_数学_随机化)
110.缺失的第一个正数(Java解法 | Python解法):题目难度(困难),题目类型(数组_哈希表)
111.下一个排列(Java解法 | Python解法):题目难度(中等),题目类型(数组_双指针)
112.最富有客户的资产总量(Java解法 | Python解法):题目难度(简单),题目类型(数组_矩阵)
113.颠倒字符串中的单词(Java解法 | Python解法):题目难度(中等),题目类型(双指针_字符串)
114.复原 IP 地址(Java解法 | Python解法):题目难度(中等),题目类型(字符串_回溯)
115.从前序与中序遍历序列构造二叉树(Java解法 | Python解法):题目难度(中等),题目类型(树_数组_哈希表_分治_二叉树)
116.最大回文数乘积(Java解法 | Python解法):题目难度(困难),题目类型(数学)
117.滑动窗口最大值(Java解法 | Python解法):题目难度(困难),题目类型(队列_数组_滑动窗口_单调队列_堆(优先队列))
118.最小覆盖子串(Java解法 | Python解法):题目难度(困难),题目类型(哈希表_字符串_滑动窗口)
119.平衡二叉树(Java解法 | Python解法):题目难度(简单),题目类型(树_深度优先搜索_二叉树)
120.二叉树的最大深度(Java解法 | Python解法):题目难度(简单),题目类型(树_深度优先搜索_广度优先搜索_二叉树)
121.最常见的单词(Java解法 | Python解法):题目难度(简单),题目类型(哈希表_字符串_计数)
122.求根节点到叶节点数字之和(Java解法 | Python解法):题目难度(中等),题目类型(树_深度优先搜索_二叉树)
123.最小栈(Java解法 | Python解法):题目难度(简单),题目类型(栈_设计)
124.二叉树的直径(Java解法 | Python解法):题目难度(简单),题目类型(树_深度优先搜索_二叉树)
125.最长有效括号(Java解法 | Python解法):题目难度(困难),题目类型(栈_字符串_动态规划)
126.字典序排数(Java解法 | Python解法):题目难度(中等),题目类型(深度优先搜索_字典树)
127.验证二叉搜索树(Java解法 | Python解法):题目难度(中等),题目类型(树_深度优先搜索_二叉搜索树_二叉树)
128.字符的最短距离(Java解法 | Python解法):题目难度(简单),题目类型(数组_双指针_字符串)
129.路径总和 II(Java解法 | Python解法):题目难度(中等),题目类型(树_深度优先搜索_回溯_二叉树)
130.对称二叉树(Java解法 | Python解法):题目难度(简单),题目类型(树_深度优先搜索_广度优先搜索_二叉树)
131.文件的最长绝对路径(Java解法 | Python解法):题目难度(中等),题目类型(栈_深度优先搜索_字符串)
132.随机数索引(Java解法 | Python解法):题目难度(中等),题目类型(水塘抽样_哈希表_数学_随机化)
133.三维形体投影面积(Java解法 | Python解法):题目难度(简单),题目类型(几何_数组_数学_矩阵)
134.比较版本号(Java解法 | Python解法):题目难度(中等),题目类型(双指针_字符串)
135.子集(Java解法 | Python解法):题目难度(中等),题目类型(位运算_数组_回溯)
136.太平洋大西洋水流问题(Java解法 | Python解法):题目难度(中等),题目类型(深度优先搜索_广度优先搜索_数组_矩阵)
137.按奇偶排序数组(Java解法 | Python解法):题目难度(简单),题目类型(数组_双指针_排序)
138.子集 II(Java解法 | Python解法):题目难度(中等),题目类型(位运算_数组_回溯)
139.最小差值 I(Java解法 | Python解法):题目难度(简单),题目类型(数组_数学)
140.用 Rand7() 实现 Rand10()(Java解法 | Python解法):题目难度(中等),题目类型(数学_拒绝采样_概率与统计_随机化)
141.字符串相乘(Java解法 | Python解法):题目难度(中等),题目类型(数学_字符串_模拟)
142.两棵二叉搜索树中的所有元素(Java解法 | Python解法):题目难度(中等),题目类型(数_深度优先搜索_二叉搜索树_二叉树_排序)
143.零钱兑换(Java解法 | Python解法):题目难度(中等),题目类型(广度优先搜索_数组_动态规划)
144.最低票价(Java解法 | Python解法):题目难度(中等),题目类型(数组_动态规划)
145.最小路径和(Java解法 | Python解法):题目难度(中等),题目类型(数组_动态规划_矩阵)
146.标签验证器(Java解法 | Python解法):题目难度(困难),题目类型(栈_字符串)
147.回文链表(Java解法 | Python解法):题目难度(简单),题目类型(栈_递归_链表_双指针)
148.路径总和(Java解法 | Python解法):题目难度(简单),题目类型(树_深度优先搜索_广度优先搜索_二叉树)
149.最长重复子数组(Java解法 | Python解法):题目难度(中等),题目类型(数组_二分查找_动态规划_滑动窗口_哈希函数_滚动哈希)
150.多数元素(Java解法 | Python解法):题目难度(简单),题目类型(数组_哈希表_分治_计数_排序)
151.求众数 II(Java解法 | Python解法):题目难度(中等),题目类型(数组_哈希表_计数_排序)
152.重新排列日志文件(Java解法 | Python解法):题目难度(简单),题目类型(数组_字符串_排序)
153.旋转图像(Java解法 | Python解法):题目难度(中等),题目类型(数组_数学_矩阵)
154.翻转二叉树(Java解法 | Python解法):题目难度(简单),题目类型(树_深度优先搜素_广度优先搜索_二叉树)
155.组合总和(Java解法 | Python解法):题目难度(中等),题目类型(数组_回溯)
156.在排序数组中查找元素的第一个和最后一个位置(Java解法 | Python解法):题目难度(中等),题目类型(数组_二分查找)
157.找出游戏的获胜者(Java解法 | Python解法):题目难度(中等),题目类型(递归_队列_数组_数学_模拟)
158.圆圈中最后剩下的数字(Java解法 | Python解法):题目难度(简单),题目类型(递归_数学)
159.删除排序链表中的重复元素(Java解法 | Python解法):题目难度(简单),题目类型(链表)
160.最大正方形(Java解法 | Python解法):题目难度(中等),题目类型(数组_动态规划_矩阵)
161.乘积小于 K 的子数组(Java解法 | Python解法):题目难度(中等),题目类型(数组_滑动窗口)
162.乘积最大子数组(Java解法 | Python解法):题目难度(中等),题目类型(数组_动态规划)
163.和为 K 的子数组(Java解法 | Python解法):题目难度(中等),题目类型(数组_哈希表_前缀和)
164.最近的请求次数(Java解法 | Python解法):题目难度(简单),题目类型(设计_队列_数据流)
165.最大加号标志(Java解法 | Python解法):题目难度(中等),题目类型(数组_动态规划)
166.最小基因变化(Java解法 | Python解法):题目难度(中等),题目类型(广度优先搜索_哈希表_字符串)
167.数组中重复的数据(Java解法 | Python解法):题目难度(中等),题目类型(数组_哈希表)
168.找到所有数组中消失的数字(Java解法 | Python解法):题目难度(简单),题目类型(数组_哈希表)
169.寻找峰值(Java解法 | Python解法):题目难度(中等),题目类型(数组_二分查找)
170.山脉数组的峰顶索引(Java解法 | Python解法):题目难度(简单),题目类型(数组_二分查找)
171.猫和老鼠 II(Java解法 | Python解法):题目难度(困难),题目类型(广度优先搜索_图_记忆化搜索_数学_动态规划_博弈)
172.不同路径(Java解法 | Python解法):题目难度(中等),题目类型(数学_动态规划_组合数学)
173.不同路径 II(Java解法 | Python解法):题目难度(中等),题目类型(数组_动态规划_矩阵)
174.地下城游戏(Java解法 | Python解法):题目难度(困难),题目类型(数组_动态规划_矩阵)
175.序列化和反序列化二叉搜索树(Java解法 | Python解法):题目难度(中等),题目类型(树_深度优先搜索_广度优先搜索_设计_二叉搜索树_字符串_二叉树)
176.最长连续序列(Java解法 | Python解法):题目难度(中等),题目类型(并查集_数组_哈希表)
177.搜索二维矩阵 II(Java解法 | Python解法):题目难度(中等),题目类型(数组_二分查找_分治_矩阵)
178.搜索二维矩阵(Java解法 | Python解法):题目难度(中等),题目类型(数组_二分查找_矩阵)
179.删列造序(Java解法 | Python解法):题目难度(简单),题目类型(数组_字符串)
180.岛屿的最大面积(Java解法 | Python解法):题目难度(中等),题目类型(深度优先搜索_广度优先搜索_并查集_数组_矩阵)
181.岛屿的周长(Java解法 | Python解法):题目难度(简单),题目类型(深度优先搜索_广度优先搜索_数组_矩阵)
182.面试题 01.05. 一次编辑(Java解法 | Python解法):题目难度(中等),题目类型(双指针_字符串)
183.贴纸拼词(Java解法 | Python解法):题目难度(困难),题目类型(位运算_动态规划_回溯_状态压缩)
184.字符串解码(Java解法 | Python解法):题目难度(中等),题目类型(栈_递归_字符串)
185.两两交换链表中的节点(Java解法 | Python解法):题目难度(中等),题目类型(递归_链表)
186.最大三角形面积(Java解法 | Python解法):题目难度(简单),题目类型(几何_数组_数学)
187.基本计算器 II(Java解法 | Python解法):题目难度(中等),题目类型(栈_数学_字符串)
188.二叉树最大宽度(Java解法 | Python解法):题目难度(中等),题目类型(树_深度优先搜索_广度优先搜索_二叉树)
189.只出现一次的数字(Java解法 | Python解法):题目难度(简单),题目类型(位运算_数)
190.买卖股票的最佳时机 II(Java解法 | Python解法):题目难度(中等),题目类型(贪心_数组_动态规划)