算法笔记
文章平均质量分 75
多冷啊、我在东北玩泥巴
这个作者很懒,什么都没留下…
展开
-
并查集及其各种优化笔记(Java实现)
文章目录并查集的概念简单实现并查集Quick Find方式Quick Union方式Quick Union的优化1、基于size的优化2、基于rank的优化3、路径压缩4、路径分裂5、路径减半改造成泛型1、使用hashCode2、使用链表 + Map总结并查集的概念简单实现并查集Quick Find方式Quick Union方式Quick Union的优化1、基于size的优化2、基于rank的优化3、路径压缩4、路径分裂5、路径减半改造成泛型1、使用hashCode2、使用链表原创 2020-05-21 02:30:05 · 170 阅读 · 0 评论 -
求子串问题,不考虑子串元素的顺序,滑动窗口法实现(Java)
文章目录题目分析实现题目给定长度为m的字符串aim,以及一个长度为n的字符串str问能否在str中找到一个长度为m的连续子串,使得这个子串刚好由aim的m个字符组成,顺序无所谓返回任意满足条件的一个子串的起始位置,未找到返回-1输入:aabbccddffaaddcc输出:4分析使用滑动窗口加欠债表实现1、构建一个欠债表,将aim中的字符串放入欠债表,并记录每个元素欠的个数...原创 2020-04-26 13:54:07 · 143 阅读 · 0 评论 -
给定一个数组,求如果排序之后,相邻两数的的最大差值(Java实现)
文章目录题目分析实现题目给定一个数组,求如果排序之后,相邻两数的的最大差值,要求时间复杂度为O(n),且要求不能用非基于比较的排序假设输入:1,7,199,8,12,45,99,2,3,4输出:100分析首先根据题意,时间复杂度能到O(n)的排序都是非基于比较的排序,我们肯定不能用排序了,但是我们可以借鉴桶排序的思想假设我们有n个元素1、我们创建n + 1个桶,由于第一个元素和...原创 2020-04-25 20:29:06 · 809 阅读 · 0 评论 -
给出n个数字 a_1,...,a_n,问最多有多少不重叠的非空区间,使得每个区间内数字的xor(异或和)都等于0
文章目录题目分析实现题目给出n个数字 a_1,…,a_n,问最多右多少不重叠的非空区间,使得每个区间内数字的xor(异或和)都等于0假设输入:1,2,3,3,2,1输出:2解释:如果拆成两部分来看[1,2,3] [3,2,1] 那么不重叠非空区间有两个,并且xor都为0,那么结果为2[1,2] [3,3] [2,1] 那么不重叠非空区间有三个,但是只有[3,3]的xor为0,结...原创 2020-04-25 19:26:57 · 272 阅读 · 0 评论 -
根据后续遍历结果重建搜索二叉树(Java实现)
题目:已知一个搜索二叉树后序遍历的数组posArr,请根据posArr,重建出整棵树,并返回头结点先来了解后序遍历是个什么玩意二叉树的前序、中序、后序三种遍历方式(Java实现)根据后序遍历的性质,我们可以知道,一个搜索二叉树如果长成下面这个鸟样那么他后序遍历的结果就是下面这个数组3,5,4,7,6,9,11,10,8分析:后序遍历一定是最后遍历根节点,那么可以推出根节点的位置...原创 2020-04-24 19:56:36 · 524 阅读 · 2 评论 -
二叉树的前序、中序、后序三种遍历方式(Java实现)
文章目录定义定义Node节点和树前序遍历代码实现递归非递归,使用栈中序遍历代码实现递归非递归,同样用栈后序遍历代码实现递归非递归定义首先我们要知道前序遍历、中序遍历、后序遍历三种遍历方式的定义前序遍历是根->左->右中序遍历是左->根->右后序遍历是左->右->根根据定义,我们很容易发现规律,前中后分别指的是根的访问顺序,比如前序,就是根在最前面...原创 2020-04-24 19:09:40 · 366 阅读 · 0 评论 -
十大经典排序算法之归并排序(Java语言)
归并排序和快排一样使用的是分治的思想,所以也可以提供很好的性能,但是归并可以提供比快排更稳定的性能,以及归并排序本身是稳定的,所以被很多语言用在对象排序方式上,java的Arrays.sort方法的对象排序用的就是归并排序的一种扩展:在jdk1.8之后,Arrays.sort的对象排序在某个阈值下使用的二分插入排序,当元素个数大于阈值的时候使用的是一种改进的归并排序TimSort,中文名叫多路归...原创 2020-04-23 16:50:22 · 73 阅读 · 0 评论 -
十大经典排序算法之堆排序(Java语言)
文章目录什么是堆如何进行堆排序呢什么是堆在了解什么是堆之前一定要先了解什么是完全二叉树看一下百度百科的介绍若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。百度百科拗口版性质介绍,能看懂上面的就行,下面的大概看下完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且...原创 2020-04-23 13:57:59 · 100 阅读 · 0 评论 -
十大经典排序算法之插入排序(Java语言)
插入排序,和选择、冒泡并称三大简单排序算法,虽然理论时间复杂度也是O(n2),但是和未经优化的冒泡比起来,还是要快一倍的,最好时间复杂度也到了O(n),所以是三大简单排序算法中性能最高的简单介绍下:插入排序就是每次从待排数组中选择第一个数来插入到已排序数组中对应的位置形象的描述下:插入排序就像抓扑克牌,每次从牌组中抓取一颗最新的牌,插入到手牌中应该在的位置假设有如下数组3,1,4,6,2,...原创 2020-04-22 18:54:34 · 79 阅读 · 0 评论 -
十大经典排序算法之冒泡排序(Java语言)附带三种优化方式
文章目录理论性质最简单实现优化理论冒泡排序也是入门学的最简单的排序算法之一,顾名思义,这个排序算法的思想呢就是每次都把最大的泡泡(数字)浮到最顶端去,然后再从后面把第二大的数向上浮,直到只剩最后一个泡泡了实际的操作过程:是将指针不断向后移动,并且对比相邻的两个数字,如果前面的大就交换位置,如果后面的大就不交换位置,不管是不是交换位置,之后都要将指针继续向上移动,然后再次对比比如有如下数组...原创 2020-04-22 17:41:37 · 88 阅读 · 0 评论 -
十大经典排序算法之简单选择排序(Java语言)
选择排序是最简单直观的排序算法该算法的革新思想是每次遍历数组选择最小的数放到最前面,然后在遍历剩下的数组,该算法不管数组起始是什么样子的,都会循环N-1次假设有数组 3,5,1,2,4第一次循环:1,5,3,2,4第二次循环:1,2,3,5,4第三次循环:1,2,3,5,4第四次循环:1,2,3,4,5剩下最后一个数肯定是最大的了,所以不用处理,如果想从大到小就反过来就行了性质...原创 2020-04-22 16:35:54 · 78 阅读 · 0 评论 -
十大经典排序算法之快速排序(Java语言)
快速排序快排的性质中文名称英文名称平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度稳定性快速排序Quickn*lognn2n*lognn*logn不稳定快排采用的是分治的思想,每次递归的的时候需要排序数组的长度都会减少,所以每次递归的时候只需要遍历子数组就好有两种理解的方式,先说我觉得比较好理解的一种方式1、先取一个元素为key,最简单的...原创 2020-04-22 15:23:26 · 77 阅读 · 0 评论