面试不再慌,看完这篇保证让你写HashMap跟玩一样

今天这篇文章给大家讲讲hashmap,这个号称是所有Java工程师都会的数据结构。为什么说是所有Java工程师都会呢,因为很简单,他们不会这个找不到工作。几乎所有面试都会问,基本上已经成了标配了。 在今天的这篇文章当中我们会揭开很多谜团。比如,为什么hashmap的get和put操作的复杂度是,甚至 ... »

重学数据结构(六、树和二叉树)

树结构是一类重要的非线性数据结构。直观来看,树是以分支关系定义的层次结构。树结构在客观世界广泛存在,如人类社会的族谱和各种社会组织机构都可用树来形象表示。 树在计算机领域中也得到广泛应用,尤以二叉树最为常用。如在操作系统中,用树来表示文件目录的组织结构。在编译系统中,用树来表示源程序的语法结构。在数 ... »

排序算法时间复杂度分析

时间:2020-10-20 21:36:57 作者:whimouse 排序算法 稳定性: 指排序后原有数列中相同值的元素相对次序是否发生改变,若不改变,则是稳定的。 稳定性算法的好处: 若一个排序算法稳定,那么上一趟排序的结果往往可以被下一趟使用。 另外若是稳定,可以避免多余的比较或移动。 具体算法 ... »

红黑树其实很简单

通过文字和图片详细解析为什么要使用红黑树,以及如何使用红黑树。本文中红黑树的代码示例有java和C两个版本,并且是完整代码,可以拷贝到IDE中直接执行的。 ... »

【学习笔记】不会吧不会吧,不会有人还在手写堆吧

今天小编在水昨天考试题题解的时候,突然发现了 STL 自带的手写堆函数,本来以为优先队列已经够了,但是没想到这些函数居然折磨好用,下面快和小编一起来看一看吧~ 前言 这些函数位于 <functional> 头文件中,不过当然 <bits/stdc++.h> 也是没问题的。 除了普通的数组,结构体建堆 ... »

树状数组(BIT)—— 一篇就够了

前言、内容梗概 本文旨在讲解: 树状数组的原理(起源,原理,模板代码与需要注意的一些知识点) 树状数组的优势,缺点,与比较(eg:线段树) 树状数组的经典例题及其技巧(普通离散化,二分查找离散化) 什么是 BIT ? 起源与介绍 树状数组或二元索引树(英语:Binary Indexed Tree), ... »

详解工程师不可不会的LRU缓存淘汰算法

大家好,欢迎大家来到算法数据结构专题,今天我们和大家聊一个非常常用的算法,叫做LRU。 LRU的英文全称是Least Recently Used,也即最不经常使用。我们看着好像挺迷糊的,其实这个含义要结合缓存一起使用。对于工程而言,缓存是非常非常重要的机制,尤其是在当下的互联网应用环境当中,起到的作 ... »

从红黑树的本质出发,彻底理解红黑树!

前言 早上好,我是彤哥。 上一节,我们一起从二叉树、二叉查找树、平衡树、AVL树、2-3树、2-3-4树、B树,一路讲到红黑树,最后得出红黑树的本质:红黑树就是2-3-4树,请看下图: 我们知道2-3-4的插入、删除、查找元素的原理是相当简单的,那么,我们是不是可以利用2-3-4树来记忆红黑树呢? ... »

【学习笔记】震惊,全机房都会分块了,就我没有

震惊,蒟蒻 Midoria7 居然在 1949 年终于写完了分块入门,活到爆! 分块是一种很暴力很优雅的数据结构。秉承散点暴力,大块整体的原则,能以根号级别复杂度优化很多的暴力。 以下由于都是隔了很长时间写的,所以码风有可能有变。 数列分块入门 1 区间加法,单点查询。 小点暴力修改,大块打标记。( ... »

谈谈InnoDB中的B+树索引

本文介绍一下索引相关知识。《MySQL技术内幕-InnoDB存储引擎》这个书确实非常经典,但是有些地方理解起来还是比较费劲的,比如与索引有关的覆盖索引,感觉看完仍然不是特别理解。本文算是个人的一个读书笔记,里边加入了自己的一些理解,对每种索引都画了一个对应的树的示意图,不一定对,但是有助于理解。期望... ... »

Java 集合 | 红黑树 | 前置知识

为啥要学红黑树吖?因为笔者最近在赶项目的时候,不忘抽出时间来复习 Java 基础知识,现在准备看集合的源码啦啦。听闻,HashMap 在 jdk 1.8 的时候,底层的数据结构发生了变化,变成了数组+链表+红黑树。很好,没了解过红黑树,所以就趁今天闲暇学习一下啦 ... »

ACMer不得不会的线段树,究竟是种怎样的数据结构?

大家好,欢迎阅读周三算法数据结构专题,今天我们来聊聊一个新的数据结构,叫做线段树。 线段树这个数据结构很多人可能会有点蒙,觉得没有听说过,但是它非常非常有名,尤其是在竞赛圈,可以说是竞赛圈的必备技能。所以如果以后遇到有人看了一点算法导论就在你面前装逼,你就可以问他:请问线段树更新的复杂度是多少? 不 ... »

数据结构与算法之最好学的最小生成树

数缺形时少直观,形缺数时难入微。 ——华罗庚 序 最小生成树问题是我在各项图论问题中最先理解与解决的,其目的就是在连通图中选择出: 使得各点构成联通的最小边权的边集 其中用到的数据结构与算法也是相对很好理解的并查集和Kruskal算法,我在我之前的文章小话数据结构-图 (聚焦与于实现的理解)也有提到 ... »

数据结构 - 堆(Heap)

数据结构 - 堆(Heap) 1.堆的定义 堆的形式满足完全二叉树的定义: 若 i < ceil(n/2) ,则节点i为分支节点,否则为叶子节点 叶子节点只可能在最大的两层出现,而最大层次上的叶子节点都依次排列在该层最左侧的位置上 如果有度为1的节点,那么只可能有一个,且该节点只有左孩子 根据堆定义 ... »

二分查找(递归与非递归)

#include <stdlib.h> #include <stdio.h> //二分查找非递归 int Binary_Search(int list[],int key,int length){ int low=0,high=length-1; while (low<=high){ int mid ... »

数据结构C语言实现----直接插入排序

直接插入排序(简单插入排序) 给定一个数字串:2 6 7 8 9 3 2 3 4 按从小到大的顺序排列输出 首先把第一个数字放到一个小组里:(2)6 7 8 9 3 2 3 4 让后从第二个数字开始往小组里插入 比如第二个数字6,比2大,随意直接不动放在5后面就可以:(2 6) 7 8 9 3 2 ... »