![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Lebron_Chen
这个作者很懒,什么都没留下…
展开
-
如何判断一个单链表是否有环以及环入口
这是一个在我们学习数据结构的时候经常会遇到的问题,今天给大家带来这个问题的几种解法。方法一最容易想到的办法就是遍历单链表,如果单链表有环的话那么会进入死循环,但是我们不知道单链表的长度,所以如果单链表长度很长,我们一直向下遍历,也无法分辨出是单链表还没遍历完还是进入了死循环。所以这种解法不靠谱。方法二我们可以在遍历单链表中的每个元素的时候,每遍历一个新的节点,就从头再开...原创 2018-08-05 14:18:55 · 8273 阅读 · 4 评论 -
了解一下一致性Hash算法
引子我们在做分布式缓存的时候,通常会对需要存储key进行一定的算法,然后使该key均匀的落到每一个节点进行存储。最简单的实现算法是普通余数Hash算法,按照节点数量,对key的hashCode进行取余,根据结果将key随机分配到不同节点上。举个例子:假设缓存服务器有三个节点,我们标记为0号节点,1号节点,2号节点。每次往缓存中插入数据的时候,会先对key取余,余数是几则存到几号...原创 2018-08-02 22:42:17 · 402 阅读 · 0 评论 -
冒泡排序算法、时间复杂度和稳定性
冒泡排序冒泡排序一般是我们学习排序算法时第一个接触的算法,下面来介绍一下冒泡排序。算法原理比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一步,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。算法分析...原创 2018-08-07 19:55:51 · 19787 阅读 · 1 评论 -
选择排序算法、时间复杂度和稳定
选择排序算法原理将数据分为有序部分和无序部分。在无序部分找出最大的元素,将最大的元素和无序部分最后一个元素交换,使得无序部分最后一个元素并入有序部分。重复第二步,直到无序部分都插入到有序部分结束。算法分析排序的思想就是维护一个有序的部分,将无序部分中最大的元素和最后一个元素相交换,交换后无序部分的最后一个元素也将有序。通俗的讲,选择排序的原理就是:先从头遍历...原创 2018-08-07 19:56:37 · 14813 阅读 · 8 评论 -
插入排序算法、时间复杂度和稳定性
插入排序算法原理将数据分为有序部分和无序部分。在无序部分选择一个元素,按照顺序插入到有序部分,使之有序。直到无序部分都插入到有序部分结束。算法分析排序的思想就是维护一个有序的部分,将无序部分的数据按照顺序插入到有序部分。通俗的讲,插入排序的原理就是:先将最后一个元素作为有序部分,前面元素作为无序部分,将倒数第二个元素和最后一个元素比较,如果倒数第二个元素大于...原创 2018-08-07 19:57:13 · 10202 阅读 · 1 评论 -
快速排序算法、时间复杂度和稳定性
快速排序算法原理通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。解法一算法分析排序的思想就是先选择一个基数,通过一趟排序将数据分割成两个部分,比基数小的放在基数前面,比基数大的放在基数后面。再对这两个部分采用同样的排...原创 2018-08-07 19:57:42 · 6183 阅读 · 2 评论 -
归并排序算法、时间复杂度和稳定性
归并排序算法原理归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。算法分析排序的思想就是将元素无限拆分,直到无可拆分为止,再将拆分的元素两两按序合并。归并排序的原理可以通过下面这张图看清楚:代码实现/** * @Title: mergeSort ...原创 2018-08-07 19:58:15 · 5045 阅读 · 0 评论 -
位运算符以及常见的使用场景
Java中的位运算有七种:<< 左移>> 右移>>> 无符号右移& 位与| 位或~ 位非^ 位异或其中位非(~)是一元运算符,其他六个都是二元运算符。这些位运算符都是作用在二进制的数上的,先列一个表描述一下这几种位运算符:下面来一一介绍一下这几种位运算符位运算符介绍1...原创 2018-08-21 17:17:18 · 19247 阅读 · 13 评论