
算法
文章平均质量分 66
bamboo_cqh
自律的白丁>_<客观的评判,有责任心的发言。
展开
-
反转链表---不能递归调用,使用额外o1的空间
关于链表的考察 链表是面试里面经常涉及到的考点,因为链表的结构相比于Hashmap、Hashtable、Concurrenthashmap或者图等数据结构简单许多,对于后者更多面试的侧重点在于其底层实现。比如Hashmap中Entry<k,v>等操作、如何扩容、容量的设定等。链表的考察更侧重于代码的书写和思路的形成。虽然说,链表的结构简单,但是涉及到指针的操作,容易引申出一些挑战性的考题,其中也牵涉到诸多小的细节的考虑,更能看出代码书写的能力和功底。面试题:反转链表题目:定义一个函转载 2022-02-11 09:06:24 · 156 阅读 · 0 评论 -
如何判断单链表里面是否有环?
这题目还是慢有意思的。题目:0.如何判断单链表里面是否有环?算法的思想是设定两个指针p, q,其中p每次向前移动一步,q每次向前移动两步。那么如果单链表存在环,则p和q相遇;否则q将首先遇到null。这里主要理解一个问题,就是为什么当单链表存在环时,p和q一定会相遇呢?假定单链表的长度为n,并且该单链表是环状的,那么第i次迭代时,p指向元素i mod n,q指向2i mod n。因此当i≡2i(mod n)时,p与q相遇。而i≡2i(mod n) => (2i - i) mod n =转载 2022-02-11 09:04:40 · 113 阅读 · 0 评论 -
链表转红黑树的原因?为什么阈值为8?
为什么 Map 桶中超过 8 个才转为红黑树? 我们知道Java8后,当Map链表长度大于或等于阈值TREEIFY_THRESHOLD(默认为 8)的时候,如果同时还满足容量(数组的长度)大于或等于 MIN_TREEIFY_CAPACITY(默认为 64)的要求,就会把链表转换为红黑树。同样,后续如果由于删除或者其他原因调整了大小,当红黑树的节点小于或等于 6 个以后,又会恢复为链表形态。首先要知道为什么要转换为红黑树? 每次遍历一个链表,平均查找的时间复杂度是 O(n),n 是链表的长度。转载 2022-02-11 08:43:02 · 1280 阅读 · 1 评论 -
洗牌算法实现shuffle
//1. 经典洗牌算法实现function shuffle(array) {let arrayLength = array.length,randomIndex, //随机数tempItem; //临时存储元素for (let i = arrayLength - 1; i >= 0; i--) {randomIndex = Math.floor(Math.random() * (i + 1));tempItem = array[randomIndex];array[ra原创 2022-02-11 08:41:43 · 200 阅读 · 0 评论 -
归并排序小记
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。合并相邻有序子序列 再来看看治阶段,我们.原创 2022-01-29 08:51:39 · 114 阅读 · 0 评论 -
Arrays.sort和Collections.sort实现原理 TimSort
Collections.sort方法底层就是调用的Arrays.sort方法。写一个例子看源码:public static void main(String[] args) { List<String> strings = Arrays.asList("6", "1", "3", "1","2"); Collections.sort(stri...转载 2019-06-11 15:01:28 · 845 阅读 · 0 评论 -
treemap(红黑树)原理
http://cmsblogs.com/?p=1013TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致还是叫做TreeMap比较好。通过这篇博文你可以获得如下知识点:红黑树的基本概念。 红黑树增加节点. 删除节点的实现过程。...转载 2019-05-13 14:42:51 · 258 阅读 · 0 评论 -
B树、B-树、B+树、B*树之间的关系
B树B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。特此说明。先介绍下二叉搜索树 1.所有非叶子结点至多拥有两个儿子(Left和Right)...转载 2019-05-21 11:20:37 · 200 阅读 · 0 评论 -
红黑树
一、在理解红黑树之前,先看一些二叉查找树二叉查找树特性:左字数上所有的节点的值都小于或等于他的根节点上的值 右子树上所有节点的值均大于或等于他的根节点的值 左、右子树也跟别为平衡二叉树 举个二叉树的例子: 可以看到如果要...转载 2019-05-21 10:52:51 · 172 阅读 · 0 评论 -
SHA1算法原理
一.SHA1与MD5差异SHA1对任意长度明文的预处理和MD5的过程是一样的,即预处理完后的明文长度是512位的整数倍,但是有一点不同,那就是SHA1的原始报文长度不能超过2的64次方,然后SHA1生成160位的报文摘要。SHA1算法简单而且紧凑,容易在计算机上实现。表8-2-1列出了对MD5及SHA1的比较差异之处。让我们根据各项特性,简要说明其间的不同。表8-2-1 MD5与SH...原创 2019-01-30 15:14:13 · 877 阅读 · 0 评论 -
MD5算法原理及其实现
什么是MD5算法MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash value),用于确保信息传输完整一致。MD5功能输入任意长度的信息,经过处理,输出为128位的信息(数字指纹); 不同的输入得到的不同的结果(唯一性);MD5属不属于加密算法认为...转载 2019-01-30 15:05:15 · 515 阅读 · 0 评论 -
Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:1public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的转载 2017-11-15 11:14:21 · 225 阅读 · 0 评论 -
八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好转载 2017-02-23 09:57:32 · 466 阅读 · 0 评论