算法与数据结构
文章平均质量分 63
大仙带你飞
活到老,学到老!
展开
-
常用数据结构-栈
栈的定义栈是一种特殊的线性表,仅允许在表的一端进行插入和删除运算。这一端被称为栈顶(top),相对地,把另一端称为栈底(bottom)。向一个栈插入新元素又称作进栈、入栈或压栈(push),它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈(pop),它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。所以栈具有“后入先出”的特点(LIFO)。栈的存储结构顺序存储于链式存储都能实现一个栈,其中顺序存储的形式大概是这样:一般的,把数组的第一个位置[0]作为栈原创 2021-02-03 16:22:32 · 263 阅读 · 0 评论 -
常用数据结构-队列
队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的端是队尾,允许删除的端是队头。所以说队列是一个先进先出的线性表,相应的也有顺序存储和链式存储两种方式。顺序存储就是用数组实现,比如有一个n个元素的队列,数组下标0的一端是队头,入队操作就是通过数组下标一个个顺序追加,不需要移动元素,但是如果删除队头元素,后面的元素就要往前移动,对应的时间复杂度就是O(n),性能自然不高。为了提高出队的性能,就有了循环队列,什么是循环队列呢?就是有两个指针,front指向队头,原创 2021-02-03 13:55:52 · 746 阅读 · 0 评论 -
常用数据结构-堆
堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。堆的常用方法:构建优先队列 支持堆排序 快速找出一个集合中的最小值(或者最大值) 在朋友面前装逼堆属性堆分为两种:最大堆和最小堆,两者的差别在于节点的排序方式。在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。这就是所谓的“堆属性”,并且这个属性对堆中的每一个节点都成立。例子:这是一个最大堆,,因为每一个父节.原创 2021-02-02 20:25:11 · 255 阅读 · 0 评论 -
常用的数据结构-树
树(Tree)的基本概念树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。二叉树每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树的性质1.若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i>=0)2.高度为k的二叉树最多有2^(k+1) - 1个结点原创 2021-02-02 15:10:38 · 421 阅读 · 0 评论 -
如何实现一个高效的单向链表逆序输出?
示例:以逆序A->B->C->D为例,图示如下java实现public void reverseLinkList() { //逆序输出链表的所有内容if (head == null || head.getNext() == null) { //当链表只有一个头节点或者只有一个结点,逆序还是原来的链表,所以直接返回 return;} else { Node p = head.getNext(); Node q = head.getNext().getNext()原创 2021-01-19 19:55:02 · 302 阅读 · 0 评论 -
Rocketmq原理
一、 MQ背景消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。主要具有以下优势:削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题)系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死)提升性能(当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统)蓄流压测(线上有些链路不好压测,可以通过堆积一定量消...原创 2020-02-05 19:39:10 · 1708 阅读 · 0 评论 -
排序算法-插入排序
一、插入排序(InsertSort)插入排序从第二个数开始,拿出第二个数进行向前插入排序,一直到最后一个数向前做插入排序。算法稳定。插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。最好的时间复杂度是O(n),最坏也就是平均是O(n^2)二、图解对于一串数字(3,5,2,1,4,10)进行插入从小到大排序,如下图演示三、算法分析 /** ...原创 2020-01-24 10:57:13 · 604 阅读 · 0 评论 -
[编程题]集合遍历
有K种颜色的小球(K<=10),每种小球有若干个,总数小于100个。现在有一个小盒子,能放N个小球(N<=8),现在要从这些小球里挑出N个小球,放满盒子。想知道有哪些挑选方式。注:每种颜色的小球之间没有差别。请按数字递增顺序输出挑选小球的所有方式。如有3种颜色,每种颜色小球的个数分别为a:1,b:2,c:3,挑出3个小球的挑法有:003,012,021,102,111,120...原创 2020-01-12 23:03:01 · 1236 阅读 · 0 评论 -
[编程题]子串模糊匹配
[编程题]子串模糊匹配时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M从字符串string开始完整匹配子串sub,返回匹配到的字符个数。sub中如果出现'?'表示可以匹配一到三个除'\0'以外的任意字符。如果sub还有找不到匹配的字符,则说明不能完整匹配。如果能完整匹配,返回匹配到的字符个数,如果有多种匹配方式,返回匹配字符数最少的那个,如果不...原创 2020-01-11 02:06:31 · 757 阅读 · 1 评论 -
面试问有哪几种垃圾回收算法,再也不怕了!
可以从不同的的角度去划分垃圾回收算法:一、按照基本回收策略分初级篇引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。标记-清除(Mark-Sweep):此算法执行分两阶段。第一阶段从引用根节点开始标...原创 2020-01-07 14:21:40 · 236 阅读 · 0 评论 -
贪心算法
文章目录1.贪心算法简介1.1 基本定义1.2 贪心算法案例1.3.贪心算法的基本思路2.贪心算法最优性证明2.1 贪心算法的前提2.2 最优子结构2.3 贪心算法与动态规划的区别3.贪心算法的经典问题3.1 近似解3.2 最优解参考资料1.贪心算法简介1.1 基本定义在贪婪算法(greedy method) 中,我们要逐步构造一个最优解。每一步,我们都在一定的标准下...原创 2020-01-06 20:58:06 · 336 阅读 · 0 评论 -
分治算法
分治算法一、算法设计与分析的基本概念一、算法二、算法设计三、算法的表示二、算法分析基础一、算法复杂度分析三、分治法一、递归的概念二、分治法的基本思想一、算法设计与分析的基本概念一、算法算法是指解决问题的一种方法或一个过程。是若干指令的有穷序列。算法具有5个重要特性:(1)有穷性:算法必须在执行有穷步之后结束,且每一步都可以在有穷的时间内完成。(2)确定性:算法的每条指...原创 2020-01-06 19:15:47 · 519 阅读 · 0 评论 -
为PHP面试而准备的算法题总结
1、插入排序(一维数组)基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。示例:[初始关键字] [49] 38 65 97 76 13 27 49J=2(38) [38 49] 65 97 76 13 27 49J=3(65) [38 49 65] 97 76 13 27 49J=4(97) [38 49 ...原创 2020-01-06 18:59:00 · 173 阅读 · 0 评论 -
B+树总结
B+树特征B+ 树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一颗B+树包含根节点、内部节点和叶子节点。B+ 树通常用于数据库和操作系统的文件系统中。 B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。 B+ 树元素自底向上插入。一个m阶的B树具有如下几个特征:1.根结点至少有两个子女。2.每个中间节点都至少包含ceil(m / 2)个孩子,...原创 2019-12-30 21:29:22 · 512 阅读 · 0 评论 -
这些经典算法面试题你都不会的话,不要去应聘啦!
1、一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。function king($n, $m){$monkeys = range(1, $n); //创建1到n数组...原创 2019-12-29 16:47:11 · 323 阅读 · 0 评论