算法专栏

Algorithm_Note

📑 目录

⚡️ 剑指offer

📚 程序员代码面试指南

栈和队列问题

链表问题

二叉树问题

递归和动态规划

数组和矩阵问题

大数据和空间限制

位运算

字符串问题

其他问题

⭐️ Leetcode笔记

📝 算法

⚡️ 剑指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从上到下打印二叉树2Python题解
32-3从上到下打印二叉树3Python题解
33二叉树搜索树的后序遍历序列Python题解
34二叉树中和为某一值的路径Python题解
35复杂链表的复制Python题解
36二叉搜索树与双向链表Python题解
37二叉树的序列化与反序列化Python题解
38字符串的排列Python题解
39数组中出现次数超过一半的数字Python题解
40最小的k个数Python题解
42连续子数组的最大和Python题解
431~n整数中1出现的次数Python题解
45把数组排成最小的数Python题解
46数字翻译成字符串Python题解
47礼物的最大值Python题解
48最长不重复子串的长度Python题解
49丑数Python题解
50第一个只出现一次的字符Python题解
51数组中的逆序对Python题解
52两个链表的第一个公共结点Python题解
53-1在排序数组中查找数字1Python题解
53-20~n-1中缺失的数字Python题解
54二叉搜索树的第k大结点Python题解
55-1二叉树的深度Python题解
55-2平衡二叉树Python题解
56-1数组中数字出现的次数Python题解
56-2数组中数字出现的次数2Python题解
57和为s的两个数字Python题解
57-2和为s的连续正数序列Python题解
58-1翻转单词顺序Python题解
58-2左旋转字符串Python题解
59-1滑动窗口的最大值Python题解
59-2队列的最大值Python题解
60n个骰子的点数Python题解
61扑克牌中的顺子Python题解
62圆圈中最后剩下的数字Python题解
63股票的最大利润Python题解
64求1+2+…+nPython题解
65不用加减乘除做加法Java题解
66构建乘积数组Python题解
68-1二叉搜索树最近公共祖先Python题解
68-2二叉树最近公共祖先Python题解

📚 程序员代码面试指南

栈和队列

id题目语言题解链接
1设计一个含有getMin功能的栈Pythonq1.py
2由两个栈组成的队列Pythonq2.py
3仅用递归函数和栈操作来逆序栈Pythonq3.py
4猫狗队列Pythonq4.py
5用一个栈实现另一个栈的排序Pythonq5.py
7生成窗口最大值数组Pythonq7.py
8单调栈问题Pythonq8.py

链表问题

id题目语言题解链接
1打印两个有序链表的公共部分Pythonq1.py
2在单链表和双链表中删除倒数第k个结点Pythonq2.py
3删除链表的中间节点和a/b处的节点Pythonq3.py
4反转单向链表和反转双向链表Pythonq4.py
5反转单向链表中第from到to个节点Pythonq5.py
6约瑟夫环形链表Pythonq6.py
7判断链表是否为回文结构Pythonq7.py
9复制含有随机指针的链表Pythonq9.py
10两个单链表生成相加链表Pythonq10.py
12将单链表的每k个节点之间逆序Pythonq12.py
13删除无序单链表中值重复出现的节点Pythonq13.py
14删除单链表中指定值的节点Pythonq14.py
15搜索二叉树转为有序双向链表Pythonq15.py
16单链表的选择排序Pythonq16.py
17删除单链表中指定节点Pythonq17.py
18向有序单链表插入新节点Pythonq18.py
19合并两个有序单链表Pythonq19.py
20按照左右半区的方式重新组合单链表Pythonq20.py
21单链表的归并排序Pythonq21.py
#合并K个有序链表Pythonmerge_k_lists.py
#删除链表中重复的元素Pythondelete_chongfu.py
#判断链表是否有环PythondetectCycle_1.py
#链表中环的入口结点PythondetectCycle_2.py
#两个链表的第一个公共结点PythondetectCycle_3.py
#链表的奇偶重排Pythonoddeven.py

二叉树问题

id题目语言题解链接
1递归和非递归实现二叉树先中后序遍历Pythonq1.py
2打印二叉树的边界节点Pythonq2.py
3直观打印二叉树Pythonq3.py
4二叉树的序列化和反序列化Pythonq4.py
7找到二叉树中最大的搜索二叉树Pythonq7.py
9二叉树的按层打印和ZigZag打印Pythonq9.py
10查找搜索二叉树中两个错误的节点Pythonq10.py
11判断t1树是否包含t2树全部的拓扑结构Pythonq11.py
13判断二叉树是否为平衡二叉树Pythonq13.py
14根据后序数组重建搜索二叉树Pythonq14.py
15验证搜索二叉树和完全二叉树Pythonq15.py
16通过有序数组生成平衡搜索二叉树Pythonq16.py
17在二叉树中找到一个节点的后继节点Pythonq17.py
18在二叉树中找到两个节点的最近公共祖先节点Pythonq18.py
20二叉树节点间的最大距离Pythonq20.py
24统计完全二叉树节点的数目Pythonq24.py
#前序和中序重建二叉树Pythonrebuild_tree.py
#打印二叉树右视图Pythonprint_right_tree.py
#二叉树深度Pythontree_depth.py
#二叉树路径所有代表数字的和Pythonall_roads_num_sum.py
#二叉树根到叶子节点目标和的路径Pythonroot_leaf_sum.py
#二叉树的最大路径和Pythonmax_road_sum.py
#判断二叉树是否对称Pythonis_duichen.py
#合并二叉树Pythonmerge2trees.py
#二叉树的镜像Pythonmirrortree.py

递归和动态规划

id题目语言题解链接
2矩阵中的最小路径和Pythonq2.py
3换钱的最少货币数Pythonq3.py
4机器人到达位置方法数Pythonq4.py
7最长递增子序列Pythonq7.py
8信封嵌套问题Pythonq8.py
9汉诺塔问题Pythonq9.py
10最长公共子序列Pythonq10.py
11最长公共子串Pythonq11.py
13最小编辑代价Pythonq13.py
#编辑距离Pythonbjjl.py
19跳跃游戏Pythonq19.py
20数组中最长连续序列Pythonq20.py
22最长回文子串Pythonq22.py
#背包问题Pythonbag1.py
#最大正方形Pythonzdzfx.py

数组和矩阵问题

id题目语言题解链接
8在行列有序矩阵中查找指定数Pythonq8.py
#在行列有序矩阵中查找指定数2Pythonmaserch.py
11未排序数组中累加和为给定值的最长子数组长度Pythonq11.py
16子数组的最大累加和问题Pythonq16.py
19数组中子数组的最大累乘积Pythonq19.py
31容器盛水问题Pythonq31.py
#合并两个有序数组Pythonmerge2arr.py
#螺旋矩阵Pythonlxmatrix.py
#顺时针旋转矩阵Pythonxzmatrix.py
#升序数组中数字出现的次数Pythonnumcishu.py
#相加和为0的三元组Pythonthreenum.py
#转动过的数组中查找目标值Pythonbstarget.py
#顺时针螺旋打印矩阵Pythonlxdy.py
#在行列有序矩阵中查找指定数2Pythonmaserch.py
#数组中未出现的最小正整数Pythonmindisappear.py
#矩阵最长递增路径Pythonjzzcdzlj.py
#旋转数组Pythonxzsz.py

大数据和空间限制

id题目语言题解链接
7岛屿的个数Pythonq7.py

位运算

id题目语言题解链接
6在其它数都出现k次的数组中找到只出现1次的数Pythonq6.py

字符串问题

id题目语言题解链接
1判断两个字符串是否为变形词Pythonq1.py
2判断两个字符串是否互为旋转词Pythonq2.py
3将整数字符串转为整数值Pythonq3.py
4字符串的统计字符串Pythonq4.py
5判断字符数组中是否所有的字符都只出现过一次Pythonq5.py
6在有序但有空的数组中查找字符串Pythonq6.py
7字符串的调整与替换Pythonq7.py
8翻转字符串Pythonq8.py
10删除多余字符得到字典序最小的字符串Pythonq10.py
11数组中两个字符串的最小距离Pythonq11.py
19拼接所有字符串产生字典顺序最小的字符串Pythonq19.py
20字符串中最长不重复子串长度Pythonq20.py
26字典树(前缀树)的实现Pythonq26.py
#字符串数组最长公共前缀Pythonstrarrqz.py
#两个字符串代表的整数相加Pythonstrsum.py
#字符串逆置大小写转换Pythonstrtrans.py

其他问题

id题目语言题解链接
11设计LRU缓存结构Pythonq11.py
29在两个长度相等的排序数组中找到上中位数Pythonq29.py
32出现次数的TopK问题Pythonq32.py
#堆排序Pythonheap.py
#快速排序Pythonquick.py
#最小k个数Pythonsmall_K.py
#10进制转N进制Python10toN.py
#求平方根Pythonsqrt.py
#加起来为目标值的组合数Pythontarget_zh.py
#括号序列Pythonkhxl.py
#括号生成Pythonkhsc.py
#翻转数字Pythonfzsz.py
#合并区间Pythonhbqj.py
#缺失数字Pythonqssz.py
#股票(一次交易)Pythongupiao1.py
#股票(两次交易)Pythongupiao2.py
#股票(无限次交易)Pythongupiao3.py
#股票(k次交易)Pythongupiao4.py
#股票(含冷冻期)Pythongupiao5.py
#股票(含手续费)Pythongupiao6.py
#寻找峰值Pythonxzfz.py
#整数集合的子集Pythonzj.py
#二叉搜索树转为排序双向列表Pythonbstree2list.py
#比特位计数Pythonbtnum.py
#二分查找Pythonbisearch.py
#打家劫舍3Pythondjjs3.py

⭐️ Leetcode刷题笔记

已解决题目列表:

id题目语言题解链接
1两数之和C++题解笔记
7整数反转Java题解笔记
9回文数Java题解笔记
13罗马数字转数字Java题解笔记
14最长公共前缀Java题解笔记
20有效的括号Java题解笔记
21合并两个有序链表Java题解笔记
26删除排序数组中的重复项Java题解笔记
27移除元素Java题解笔记
35搜索插入位置Java题解笔记
38报数Java题解笔记
50Pow(x,n)Python题解笔记
38报数Java题解笔记
53最大子序和Java题解笔记
54顺时针打印矩阵Python题解笔记
58最后一个单词的长度Java题解笔记
66加一Java题解笔记
67二进制求和Java题解笔记
69x的平方根Java题解笔记
70爬楼梯Java题解笔记
79单词搜索Python题解笔记
83删除排序链表中的重复元素Java题解笔记
88合并两个有序数组Java题解笔记
100相同的树Java题解笔记
101对称二叉树Java题解笔记
102二叉树的层次遍历Python题解笔记
105根据前序和中序重建二叉树Java、Python题解笔记
107二叉树的层次遍历 IIJava题解笔记
108将有序数组转换为二叉搜索树Java题解笔记
110平衡二叉树Java题解笔记
121股票的最大利润Python题解笔记
136只出现一次的数字Python题解笔记
141判断链表中是否有环Python题解笔记
151翻转字符串的单词Python题解笔记
155最小栈Python题解笔记
160相交链表Python题解笔记
169多数元素Python题解笔记
191位1的个数Python题解笔记
226翻转二叉树Python题解笔记
235二叉搜索树最近公共祖先Python题解笔记
260只出现一次的数字 IIIPython题解笔记
264丑数2Python题解笔记
343整数拆分Python题解笔记
645错误的集合Python题解笔记
946验证栈序列Python题解笔记

📝 常用算法总结

动态规划

排序

排序算法平均时间复杂度最差时间复杂度空间复杂度数据对象稳定性
冒泡排序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:代表数据的最大值减最小值

排序算法解析