![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
各个击破数据结构和算法
文章平均质量分 94
云计算&大数据
这个作者很懒,什么都没留下…
展开
-
红黑树与TreeMap详细解析
一、为什么要创建红黑树这种数据结构在上篇我们了解了AVL树,既然已经有了AVL这种平衡的二叉排序树,为什么还要有红黑树呢?AVL树通过定义我们知道要求树中每一个结点的左右子树高度差的绝对值不超过1,其是一颗严格的平衡树,这样构建出来的平衡二叉排序树具有很好的查找性能,但是为了保持其每个结点平衡因子绝对值不超过1的特性在插入或者删除的时候需要的维护成本是很大的,插入或者删除需要大量的平衡度计算,比如上一篇在AVL的插入的时候就需要不断回溯其父节点调整平衡因子的值,数据量小没什么问题,但是实际应用中往往数.原创 2021-02-21 22:03:25 · 484 阅读 · 1 评论 -
13.动态规划----最大子序和
动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题,例如斐波那契数列,如果运用递归的方式来求解会重复计算很多相同的子原创 2020-12-19 21:26:03 · 94 阅读 · 1 评论 -
12. 贪心算法进阶----种花问题
假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,0,1], n = 1输出: True示例 2:输入: flowerbed = [1,0,0,0,1], n = 2输出: False注意原创 2020-12-19 17:37:11 · 267 阅读 · 1 评论 -
11.贪心算法入门-----Dijkstra算法详解
Dijkstra算法详细(单源最短路径算法)对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或许,你曾经感觉它很难,那么,这个时候正适合你重新认识它。Dijkstra算法是干啥的?Dijkstra是用来求单源最短路径的就拿上图来说,假如城市之间直达的路径和长度已知,那么可以使用dijkstra算法计算北京到图中所有节点的最短距离。单源什么意思?从一个原创 2020-12-19 02:34:31 · 2778 阅读 · 1 评论 -
10.巩固学习PriorityQueue类------海量数据处理的 Top K算法(问题) 小顶堆实现
海量数据处理的 Top K算法(问题) 小顶堆实现问题描述:有N(N>>10000)个整数,求出其中的前K个最大的数。(称作Top k) 问题分析:由于(1)输入的大量数据;(2)只要前K个。那么对整个输入数据的保存和排序是非常耗时耗内存且没必要的。可以利用数据结构的最小堆来处理该问题。最小堆如图所示,对于每个非叶子节点的数值,一定不大于孩子节点的数值。这样可用含有K个节点的最小堆来保存K个目前的最大值(当然根节点是其中的最小数值)。每次有数据输入的时候可以先与根节点比较。若不大于原创 2020-12-19 01:39:03 · 226 阅读 · 1 评论 -
9.Java中PriorityQueue详解及堆相关的算法题
Java中PriorityQueue详解Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。PriorityQueue其实是一种特殊的队列,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator,类似于C++的仿函数)。Java中PriorityQueue实现了Queue接口原创 2020-12-18 21:55:03 · 293 阅读 · 1 评论 -
8.堆(Heap)和堆排序及相关算法题
堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。堆是非线性数据结构,相当于一维数组,有两个直接后继。原创 2020-12-18 21:11:17 · 343 阅读 · 0 评论 -
7.集合(Set)
Set集合类似于一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序。实际上Set就是Collection只是行为略有不同(Set不允许包含重复元素)。Set集合不允许包含相同的元素,如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。HashSet类HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类。HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找原创 2020-12-17 23:34:15 · 82 阅读 · 0 评论 -
6.哈希表【HashTable】
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。...原创 2020-12-17 23:28:06 · 89 阅读 · 0 评论 -
5.栈【Stack】
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。Java Stack 类栈是Vector的一个子类,它实现了一个标准的后进先出的栈。栈只定义了默认构造函数,用来创建一个空栈。 栈除了包括由Vector定义的所有方法,也定义了自己的一些原创 2020-12-17 23:20:16 · 133 阅读 · 0 评论 -
4.队列(Queue)及相关算法题
一、 队列的定义你们在用电脑时有没有经历,机器有时会处于疑似死机的状态,鼠标点什么似乎都没用,双击任何快捷方式都不动弹。就当你失去耐心,打算rest时。突然他像酒醒了一样,把你刚才点击的所有操作全部按顺序执行一遍。这其实是因为操作系统中的多个程序因需要通过一个通道输出,而按先后次序排队等待造成的。再比如向移动、联通、电信等客服电话,客服人员与客户相比总是少数,在所有的客服人员都占线的情况下,客户会被要求等待,直到有某个客户人员空下来,才能让最先等待的客户接通电话。这里也是将所有当前打客服电话的客户进行原创 2020-12-17 23:02:08 · 402 阅读 · 0 评论 -
3.链表及相关算法题
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)原创 2020-12-17 21:24:04 · 73 阅读 · 0 评论 -
2.【数组】及Leetcode数组相关算法题
数组数组定义结构形式栈内存堆内存与结构或类中的字段的区别Java中Arrays详解一、Arrays类的定义二、Arrays常用函数(都是静态的)1.void Arrays.sort()2.Arrays.fill(Object[] array,Object object)3.Arrays.toString(Object[] array)4.Arrays.deepToString(Object[][] arrays)常用类型转换String <---> CharString数组 <--->原创 2020-12-17 18:34:41 · 153 阅读 · 0 评论 -
1.数据结构与算法概念详解
数据结构与算法数据结构定义研究对象数据的逻辑结构数据的物理结构数据存储结构常用的数据结构数组(Array)栈( Stack)队列(Queue)链表( Linked List)树( Tree)图(Graph)堆(Heap)散列表(Hash)常用算法算法特征有穷性(Finiteness)确切性(Definiteness)输入项(Input)输出项(Output)可行性(Effectiveness)要素一、数据对象的运算和操作二、算法的控制结构评定时间复杂度空间复杂度正确性可读性健壮性方法递推法递归法穷举法贪心算原创 2020-12-17 15:49:20 · 566 阅读 · 0 评论