个人算法基础的学习中的笔记
剑指Offer
数组部分
1_二维数组中的查找
2_旋转数组的最小数字
3_调整数组顺序使计数位于偶数前面
4_数组中出现次数超过一半的数字
5_连续子数组的最大和
6_把数组排成最小的数
7_数组中的逆序对
8_数字在排序数组中出现的次数
9_数组中只出现一次的数字
10_数组中重复的数字
11_构建乘积数组
字符串部分
1_字符串排列
2_左旋转字符串
3_把字符串转为整数
4_替换空格
5_正则表达式匹配
6_第一个只出现一次的字符串
7_翻转单词顺序序列
8_表示数值的字符串
链表部分
1_从尾到头打印链表
2_链表中倒数第k个结点
3_反转链表
4_合并两个排序的链表
5_复杂链表的复制
6_两个链表的第一个公共结点
7_链表中环的入口结点
8_删除链表中重复的结点
栈部分
1_用两个栈实现队列
2_包含min函数的栈
3_栈的压入、弹出序列
递归部分(与数学归纳法有点相似)
回溯法部分
二叉树部分
1_重建二叉树
2_树的子结构
3_二叉树的镜像
4_从上往下打印二叉树
5_二叉树中和为某一值的路径
6_二叉树的深度
7_平衡二叉树
8_二叉树的下一个结点
9_对称的二叉树
10_按之字顺序打印二叉树
11_把二叉树打印成多行
12_序列化二叉树
二叉搜索树部分
1_二叉搜索树的后序遍历序列
2_二叉搜索树与双向链表
3_二叉搜索树的第k个结点
其他部分
1_二进制中1的个数
2_数值的整数次方
3_顺时针打印矩阵
4_最小的K个数
5_整数中1出现的次数(从1到n整数中1出现的次数)
6_丑数
7_和为S的连续正数序列
8_和为S的两个数字
9_扑克牌顺子
约瑟夫环
10_孩子们的游戏_圆圈中最后剩下的数.cpp)
11_求1+2+3+…+n
12_不用加减乘除的加法
13_字符流中第一个不重复的字符
最大堆与最小堆
14_数据流中的中位数
15_滑动窗口的最大值
排序算法
1_冒泡排序
2_插入排序
3_希尔排序
4_快速排序
5_简单选择排序
6_堆排序
7_归并排序
8_基数排序
广度优先搜索算法与深度优先搜索算法
广度优先搜索算法(Breadth-First-Search,缩写为 BFS)是一种利用队列实现的搜索算法。简单来说,其搜索过程和 “湖面丢进一块石头激起层层涟漪” 类似。
深度优先搜索算法(Depth-First-Search,缩写为 DFS)是一种利用递归实现的搜索算法。简单来说,其搜索过程和 “不撞南墙不回头” 类似。
BFS 的重点在于队列,而 DFS 的重点在于递归。这是它们的本质区别。
BFS 常用于找单一的最短路线(从A到B是否有最短路劲),它的特点是 “搜到就是最优解”。
广度优先搜索用于在非加权图中查找最短路径,狄克斯特拉算法 用于在加权图中查找最短路径。仅当权重为正时狄克斯特拉算法才管用如果图中包含负权边,请使用贝尔曼——福德算法 。
而DFS 用于找所有解的问题,它的空间效率高,而且找到的不一定是最优解,必须记录并完成整个搜索,故一般情况下,深搜需要非常高效的剪枝。