Skip to content

yearing1017/Algorithm_Note

Repository files navigation

Algorithm_Note

📑 目录

剑指offer

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

Leetcode刷题笔记

Hot-100

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