数据结构和算法
卖山竹的山兔
这个作者很懒,什么都没留下…
展开
-
JDK1.8的hash函数与桶位置的计算
所需知识:位操作<< : 左移运算符,num << 1,相当于num乘以2 低位补0>> : 右移运算符,num >> 1,相当于num除以2 正数高位补0,负数高位补1>>> : 无符号右移,忽略符号位,空位都以0补齐 % : 模运算 取余^ : 位异或 第一个操作数的的第n位于第二个操作数的第n位相反,那么结果的第n为也为1,否则为0 & : 与运算 第一个操作数的的第n位于第二个操作数的第n位如果都是1.原创 2020-08-29 00:32:47 · 552 阅读 · 0 评论 -
lc_dbp_18_fourSum
/*题目:四数之和给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2...原创 2020-08-23 12:29:12 · 223 阅读 · 0 评论 -
关于HashMap和ConcurrenHashMap的知识总结
HashMap在jdk1.7和1.8中的区别 HashMap中的resize以及jdk1.7中死链的情况 JDK1.7的ConcurrentHashMap 的put、get、remove工作原理 JDK1.8的ConcurrentHashMap 的put、get 工作原理原创 2020-07-23 17:13:52 · 199 阅读 · 0 评论 -
MinSubstring
【题目】 给定字符串str1和str2,求str1的子串中含有str2所有字符的最小子串长度。 输出str1的字串中含有str2所有字符的最小字符串长度,如果不存在请输出0。【举例】 str1 = “aabcde”, str2 = “ca”。返回3.str1 = “12345”, str2 = “344”。返回0./*思路: 主要思想是:采用两个指针(1)如果两指针之间不完全包含所有元素,后面的指针后移;(2)如果包含了所有元素,则更新最短子串长度,并记...原创 2020-07-11 10:05:23 · 307 阅读 · 0 评论 -
JDK1.8的ConcurrentHashMap 的put、get 工作原理
JDK1.8的ConcurrentHashMapput总结:如果没有初始化就先调用initTable()方法来进行初始化过程 如果没有hash冲突就直接CAS插入 如果还在进行扩容操作就先进行扩容 如果存在hash冲突,就加锁来保证线程安全,这里有两种情况,一种是链表形式就直接遍历到尾端插入,一种是红黑树就按照红黑树结构插入, 如果Hash冲突时会形成Node链表,在链表长度超过8,Node数组超过64时会将链表结构转换为红黑树的结构,break再一次进入循环 如果添加成功就调用addCo原创 2020-07-02 12:05:13 · 1667 阅读 · 2 评论 -
JDK1.7的ConcurrentHashMap 的put、get、remove工作原理
很详细,很不错,好理解https://www.cnblogs.com/heqiyoujing/p/10928423.html原创 2020-07-02 10:19:41 · 1078 阅读 · 0 评论 -
[2020.4.2]Arraylist、HashMap的遍历顺序
ArrayList、LinkedList:遍历是按照添加的顺序执行的,根据数组或上下结点存储,所以有序HashMap:遍历不是按照添加顺序执行的,因为是根据hash码随机存储,所以遍历是无序的...原创 2020-04-02 20:25:24 · 272 阅读 · 0 评论 -
[2020.4.1]判断二叉树是否是二叉排序树的方法
思路一:最大/最小值法: 通过自上而下传递每个结点的最大值和最小值的方法解决问题。顺序为先序遍历的顺序 从min = Integer.MIN_VALUE,max = Integer.MAX_VALUE开始,根节点的值val必然在这个范围内。 处理左子树: 新区间:max更新为父节点的的val(左子结点<父节点的val),min为父节点...原创 2020-04-01 17:57:58 · 2244 阅读 · 0 评论 -
[2020.4.1]二叉树的非递归中序遍历
我们知道递归遍历树的方式:对于树的访问先是从根节点开始进行的,递归左子树和右子树,对于左子树和右子树又可以看成是一棵子树继续递归下去,访问根节点的时候它不是直接处理根节点的而是需要等待它的左子树调用完之后那么才进行处理的,左子树也是一样,当访问到它的左子树的时候也需要等待它的左子树处理完毕才处理自己。这也就是先访问,后出现的特点,与一种数据结构的特点是类似的,那就是栈,栈也是 "先进后出" 的...转载 2020-04-01 17:11:52 · 148 阅读 · 0 评论