本项目是算法学习过程中的代码部分。目前分为四个模块:
-
第一部分:《剑指offer》题解,共67道题已完结。
-
第二部分:《LeetCode》题解,更新中。
-
第三部分:《程序员笔试面试指南》题解,更新中。
-
第四部分:《算法题型分类总结》,更新中。
关于学习笔记总结部分,请移步另一项目: 学习笔记传送门
- 01.二维数组查找
- 02.替换空格
- 03.从尾到头打印链表
- 04.给某二叉树的前序遍历和中序遍历的结果,重建二叉树
- 05.用两个栈实现队列
- 06.旋转数组的最小数字
- 07.斐波那契数列
- 08.青蛙跳台阶
- 09.变态跳台阶
- 10.矩形覆盖
- 11.二进制中1的个数
- 12.浮点数值的整数次方
- 13.调整数组顺序使奇数位于偶数前面
- 14.链表中倒数第k个节点
- 15.反转链表
- 16.合并两个排序的链表
- 17.树的子结构
- 18.二叉树的镜像
- 19.顺时针打印矩阵
- 20.包含Min的栈
- 21.栈的压入、弹出序列
- 22.从上往下打印二叉树
- 23.二叉树的后续遍历列表
- 24.二叉树中和为某一值的路径
- 25.复杂链表的复制
- 26.二叉搜索树转换成一个排序的双向链表
- 27.字符串排列
- 28.数组中超过一半的数字
- 29.最小的K个数
- 30.连续子数组最大和
- 31.数组中1出现的次数
- 32.把数组排成最小的数
- 33.丑数 只包含质因子2、3和5的数称作丑数,求按从小到大的顺序的第N个丑数
- 34.第一个只出现一次的字符
- 35.数组中的逆序对
- 36.两个链表的第一个公共节点
- 37.数字在排序数组中出现的次数
- 38.二叉树树的深度
- 39.是否平衡二叉树
- 40.数组中两个只出现一次的数字
- 41.和为S的连续正数序列
- 42.和为S的两个数字
- 43.左旋转字符串
- 44.反转单词序列
- 45.扑克牌顺子
- 46.圆圈中最后剩下的数
- 47.求1+2+3+...+n
- 48.不用加减乘除做加法
- 49.字符串转整数
- 50.数组中重复的数字
- 51.不用除法构建乘积数组
- 52.正则表达式匹配
- 53.表示数值的字符串
- 54.字符流中第一个不重复的字符
- 55.链表中环的入口结点
- 56.删除链表中重复的结点
- 57.二叉树的下一个结点
- 58.对称的二叉树
- 59.按之字形顺序打印二叉树
- 60.把二叉树打印成多行
- 61.序列化二叉树
- 62.二叉搜索树的第k个结点
- 63.数据流中的中位数
- 64.滑动窗口的最大值
- 65.矩阵中的路径
- 66.机器人的运动范围
- 67.剪绳子
- 02.两数相加
- 19.删除链表的倒数第N个节点
- 21.合并两个有序链表
- 23.合并k个排序链表
- 24.两两交换链表中的节点
- 61.旋转链表
- 82.删除排序链表中的重复元素2
- 83.删除排序链表中的重复元素
- 86.分隔链表
- 92.反转链表2
- 109.有序链表转换二叉搜索树
- 138.复制带随机指针的链表
- 141.环形链表
- 142.环形链表2
- 143.重排链表
- 147.对链表进行插入排序
- 148.排序链表
- 160.相交链表
- 203.移除链表元素
- 206.反转链表
- 234.回文链表
- 237.删除链表中的节点
- 328.奇偶链表
- 445.两数相加2
- 725.分隔链表
- 876.链表中间节点
- 05.最长回文子串
- 10.正则表达式匹配
- 32.最长有效括号
- 53.最大连续子序列和
- 62.不同路径
- 63.不同路径2
- 64.最小路径和
- 70.爬楼梯
- 72.编辑距离
- 79.单词搜索
- 84.柱状图中最大的矩形
- 85.最大矩形
- 87.扰乱字符串
- 95.不同的二叉搜索树2
- 96.不同的二叉搜索树
- 120.三角形最小路径和
- 121.买卖股票的最佳时机
- 122.买卖股票的最佳时机2
- 123.买卖股票的最佳时机3
- 198.打家劫舍
- 213.打家劫舍2
- 300.最长上升子序列LIS
- 322.零钱兑换
- 474.一和零
- 516.最长回文子序列
- 651.四键键盘
- 673.最长递增子序列的个数
- 1143.最长公共子序列LCS
- 56.合并区间
- 57.插入区间
- 75.颜色分类
- 147.链表插入排序
- 148.排序链表
- 164.最大间距
- 179.最大数
- 215.数组中第K个最大元素
- 274.H指数
- 324.摆动排序2
- 349.两个数组交集
- 524.通过删除字母匹配到字典里最长单词
- 710.黑名单中随机数
- 767.重构字符串
- 922.按奇偶排序数组2
- 969.煎饼排序
- 973.最接近原点的K个点
- 976.三角形最大周长
- 01.打印两个有续链表公共部分
- 02.在单链表和双链表中删除倒数第K个节点
- 03.删除链表中间节点和a/b节点
- 04.反转链表
- 05.反转部分链表
- 06.约瑟夫环问题-链表解法
- 07.判断链表是否回文结构
- 08.将单向链表按某值划分成左边小、中间相等、右边大的形式
- 09.复制含有随机指针节点的链表
- 10.两个单链表生成相加链表
- 11.两个链表相交的第一个节点 12.将单链表每K个节点之间逆序
- 13.删除无序单链表中值重复出现的节点
- 14.在单链表中删除指定值的节点
- 15.将搜索二叉树转换成双向链表
- 16.单链表的选择排序
- 17.怪异的删除方式
- 18.单链表的选择排序
- 19.合并两个有序的单链表
- 20.按照左右半区的方式重新组合单链表
初级算法49题: 初级算法文档
数组系列:
字符串系列
链表系列
二叉树系列
排序系列
动态规划系列
设计系列
数学系列
其它系列
1.冒泡排序: 原地排序,稳定排序(相邻元素大小相等时不交换),最好O(N),最坏O(N^2),平均O(N^2)
2.插入排序: 原地排序,稳定排序(可以将后面出现的元素,插入到前面出现元素的后面),最好O(N),最坏O(N^2),平均O(N^2) 3.选择排序: 原地排序,不稳定排序(每次查找剩余未排序元素最小值和前面元素交换位置,破坏稳定性),最好、最坏、平均O(N^2)
4.归并排序: 非原地排序(空间O(N)),稳定排序(子数组合并时候,将pq的放前面,q+1r放后面),最好、最坏、平均O(NLog(N))
5.快速排序: 原地排序,稳定排序(子数组合并时候,将pq的放前面,q+1r放后面),最好O(NLog(N))、最坏O(N^2、平均O(NLog(N))
注:Readme文档更新较慢,一般在一个系列完成后才会更新,具体以代码为准。