
数据结构与算法
常见数据结构与算法讲解分析与实现(Java语言),包括链表、双链表、堆、栈、二叉树增删改查、二叉树递归非递归遍历、平衡二叉树、哈夫曼树、并查集、dijkstra算法、弗洛伊德算法、dfs、bfs算法以及快排、归并排序等八大排序。
Big sai
原创公众号:「bigsai」,回复【bigsai】获取珍藏pdf书籍资源,回复【进群】即可加入leetcode打卡群。分享Java,数据结构与算法,python爬虫知识,期待和优秀的你成为朋友!
-
原创 数据结构与算法——二叉平衡树(AVL树)详解
AVL树是带有平衡条件的二叉查找树(平衡二叉树)。这个平衡条件必须要`容易保持`。而且要保证它的深度是O(logN). AVL的条件是左右树的高度差(`平衡因子`)不大于1;并且它的每个子树也都是平衡二叉树。2019-08-25 11:41:214883
2
-
原创 数据结构与算法—这可能是最易懂的快速幂讲解了
文章收录在公众号:[bigsai],任何转载需要注明来源。欢迎一键三连!前言快速幂是什么?顾名思义,快速幂就是快速算底数的n次幂。有多快?其时间复杂度为 O(log₂n), 与朴素的O(n)相比效率有了极大的提高。用的多么?快速幂属于数论的范畴,本是ACM经典算法,但现在各厂对算法的要求越来越高,并且快速幂适用场景也比较低多并且相比朴素方法有了非常大的提高。所以掌握快速幂算法已经是一名更合格的工程师必备要求!下面来详细看看快速幂算法吧!快速幂介绍先看个问题再说:初探首.2020-10-29 11:19:371113
4
-
原创 我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满!而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的!当我码完字准备睡觉时:写不好别睡觉!分析如果用数据结构与算法造出东西来呢?...2019-09-21 18:15:27453494
495
-
原创 经典面试题:给两个序列如何构造一棵二叉树
微信搜一搜:bigsai大家都在关注的刷题、学习数据结构和算法宝藏项目关注回复进群即可加入力扣打卡群,欢迎划水。近期打卡:LeetCode 98验证二叉搜素树(中序遍历)&99恢复二叉搜索树LeetCode 100相同的树&101对称二叉树LeetCode 102二叉树的层序遍历&103二叉树锯齿形遍历&104二叉树的最大深度前言在面试的过程中,我们经常会遇到一些数据结构相关的问题,很多经典问题百问不烂。而数据结构的问题中排序、链表、二叉树等问题又是经久不衰.2021-01-17 20:54:27495
4
-
原创 数据结构与算法之线性表(超详细顺序表、链表)
原创公众号:bigsai文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star前言通过前面数据结构与算法基础知识我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容。当然,我用自己的理解解分享给大家。其实说实话,可能很多人依然分不清线性表,顺序表,和链表之间的区别和联系!线性表:逻辑结构, 就是对外暴露数据之间的关系,不关心底层如何实现,数据结构的逻辑结构大分类就是线性结构和非线性结构而顺序表、链表都是一种线性表。顺序表、链表:物理结构,他是实现一个结构实际物.2021-01-14 22:52:07627
7
-
原创 数据结构与算法必知基础知识
原创公众号:bigsai文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star前言数据结构与算法是程序员内功体现的重要标准之一,且数据结构也应用在各个方面,业界更有程序=数据结构+算法这个等式存在。各个中间件开发者,架构师他们都在努力的优化中间件、项目结构以及算法提高运行效率和降低内存占用,在这里数据结构起到相当重要的作用。此外数据结构也蕴含一些面向对象的思想,故学好掌握数据结构对逻辑思维处理抽象能力有很大提升。为什么学习数据结构与算法?如果你还是学生,那么这门课程是必修的,考研基本也.2021-01-06 22:58:12999
9
-
原创 跳表(SkipList)设计与实现(java)
跳表(SkipList)设计与实现跳表是面试常问的一种数据结构,它在很多中间件和语言中得到应用,我们熟知的就有Redis跳表。并且在面试的很多场景可能会问到,偶尔还会让你手写试一试(跳表可能会让手写,红黑树是不可能的).2020-12-26 16:09:49597
4
-
原创 面试官本拿求素数搞我,但被我优雅的“回击“了(素数筛)
前言现在的面试官,是无数开发者的梦魇,能够吊打面试官的属实不多,因为大部分面试官真的有那么那几下子。但在面试中,我们这些小生存者不能全盘否定只能单点突破—从某个问题上让面试官眼前一亮。这不,今天就来分享来了。这年头,算法岗内卷不说,开发岗也有点内卷,对开发者要求越来越高了,而面试官也是处心积虑的 “刁难” 面试者,凡是都喜欢由浅入深,凡是都喜欢问个:你知道为什么?你知道原理吗?之类。并且,以前只是大厂面试官喜欢问算法,大厂员工底子好,很多甚至有ACM经验或者系统刷题经验,这很容易理解,但现在一些小公司面2020-12-11 10:05:092755
9
-
原创 【五大常用算法】一文搞懂分治算法
原创公众号:bigsai文章收录在 bigsai-algorithm 求个star前言分治算法(divide and conquer)是五大常用算法(分治算法、动态规划算法、贪心算法、回溯法、分治界限法)之一,很多人在平时学习中可能只是知道分治算法,但是可能并没有系统的学习分治算法,本篇就带你较为全面的去认识和了解分治算法。在学习分治算法之前,问你一个问题,相信大家小时候都有存钱罐的经历,父母亲人如果给钱都会往自己的宝藏中存钱,我们每隔一段时间都会清点清点钱。但是一堆钱让你处理起来你可能觉得很复.2020-12-03 15:59:27838
6
-
原创 「归纳|总结」程序员必知必会的十大排序算法
首发公众号:bigsai 转载请联系新人原创公众号,求支持一下!文章已收录在 我的Github bigsai-algorithm 欢迎star绪论身为程序员,十大排序是是所有合格程序员所必备和掌握的,并且热门的算法比如快排、归并排序还可能问的比较细致,对算法性能和复杂度的掌握有要求。bigsai作为一个负责任的Java和数据结构与算法方向的小博主,在这方面肯定不能让读者们有所漏洞。跟着本篇走,带你捋一捋常见的十大排序算法,轻轻松松掌握!首先对于排序来说大多数人对排序的概念停留在冒泡排序或者JD.2020-11-26 10:38:552567
9
-
原创 【排序算法】——图解双轴快排(建议收藏)
原创公众号:「bigsai」,转载需注明出处关注回复bigsai领取Java进阶pdf,回复进群加入力扣打卡群(目前200+).觉得不错还请一键三连!前言在排序算法中,快排是占比非常多的一环,但是快排其思想一直被考察研究,也有很多的优化方案。这里主要讲解双轴快排的思想和实现。首选,双轴快排也是一种快排的优化方案,在JDK的Arrays.sort()中被主要使用。所以,掌握快排已经不能够满足我们的需求,我们还要学会双轴快排的原理和实现才行。回顾单轴快排单轴快排也就是我们常说的普通快速排序,对.2020-11-05 11:55:31642
2
-
原创 数据结构与算法—前导
前言重要性数据结构与算法是程序员内功体现的重要标准之一,而数据结构的也应用在各个方面,更有程序=数据结构+算法这个被人认证的等式存在。并且数据结构与算法的应用无处不在,各个中间件开发者,架构师。他们都在努力的优化中间件、项目结构结构以及算法提高运行效率与内存占用。故学好数据结构是很重要的。数据结构概念数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关...2019-07-25 23:53:342372
0
-
原创 数据结构于算法—线性表
通过前面[数据结构与算法前导](https://blog.csdn.net/qq_40693171/article/details/96913019)我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容。当然,我用`自己的理解解`分享给大家。- 其实说实话,可能很多人依然分不清`线性表,顺序表,和链表`之间的区别和联系! - 线性表:`逻辑结构`, 就是对外暴露数据之间的关系,不关心底层如何实现。 - 顺序表、链表:`物理结构`,他是实现一个结构实际物理地址上的结构。比如顺序表2019-08-04 13:15:342618
2
-
原创 数据结构与算法—一文多图搞懂双链表
目录前言双链表介绍与单链表区别前言前面讲过线性表中顺序表和链表的实现和性质。但是在数据结构与算法中,双向链表无论在考察还是运用中都占有很大的比例,笔者旨在通过本文与读者一起学习分享双链表相关知识。双链表介绍与单链表区别结构上:...2019-08-11 12:03:073447
1
-
原创 数据结构与算法—队列详解
大纲前言 队列介绍基本属性 普通队列循环队列链式实现具体实现前言 栈和队列是一对好兄弟,前面我们介绍过数据结构与算法—栈详解,那么栈的机制相对简单,后入先出,就像进入一个狭小的山洞,山洞只有一个出口,只能后进先出(在外面的先出去)。而队列就好比是一个隧道,后面的人跟着前面走,前面人先出去(先入先出)。日常的排队就是队列运转形式的一个描述!所以队列的核心理念就是:先进先出!队列介绍基...2019-08-16 01:18:414137
2
-
原创 数据结构与算法—栈详解
目录什么是栈设计与介绍数组实现结构设计push插入s什么是栈百度百科上,栈是这么定义的:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素...2019-08-13 18:51:044122
3
-
原创 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)
目录递归介绍递归求阶乘递归求斐波那契递归解决汉诺塔总结递归介绍递归:就是函数自己调用自己。 子问题须与原始问题为同样的事,或者更为简单;递归通常可以简单的处理子问题,但是不一定是最好的。对于递归要分清以下概念:自己调用自己递归通常不在意具体操作,只关心初始条件和上下层的变化关系。递归函数需要有临界停止点,即递归不能无限制的执行下去。通常这个点为必须经过的一个数。递归通常能被其他...2019-08-18 11:50:315858
11
-
原创 数据结构与算法—二叉排序(查找)树
再数据结构中`树`、`图`才是数据结构标志性产物,(线性表大多都现成api可以使用),因为树的`难度相比线性表大一些`并且树的`拓展性很强`,你所知道的树、二叉树、**二叉排序树**,**AVL树**,线索二叉树、**红黑树**、B数、线段树等等高级数据结构。然而二叉排序树是所有的基础,所以彻底搞懂二叉排序树也是非常重要的。2019-08-19 13:23:316041
0
-
原创 数据结构与算法—二叉树的层序、前序中序后序(递归、非递归)遍历
目录前言 层序遍历 前中后序遍历(递归) 前言 前面介绍了二叉排序树的构造和基本方法的实现。但是排序遍历也是比较重要的一环。所以笔者将前中后序.和层序遍历梳理一遍。了解树的遍历,需要具有的只是储备有队列,递归,和栈。这里笔者都有进行过详细介绍,可以关注笔者数据结构与算法专栏。持续分享,共同学习。层序遍历 层序遍历。听名字也知道是按层遍历。我们知道一个节点有左右节点。而每一层一层的遍...2019-08-21 23:50:554064
0
-
原创 数据结构与算法——并查集(不相交集合)
文章目录认识并查集认识并查集对于并查集(不相交集合),很多人会感到很陌生,没听过或者不是特别了解。实际上并查集是一种挺高效的数据结构。实现简单,只是所有元素统一遵从一个规律所以让办事情的效率高效起来。对于定于,百科上这么定义的:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素...2019-08-28 00:13:139546
3
-
原创 学弟不懂原码反码补码,气的我给女朋友彻底讲了一夜
前言故事是一个真实的故事,前两天要被一位小学弟折磨死,原码、反码、补码不懂就算了,讲了一遍还不懂。我搞不懂是二进制太难还是我太难了呢?你们不信?立图为证:他这问的给我直接问懵逼了,二进制符号位不参与运算?我怎么听得给我都听糊涂了,哈哈哈,后来我就给他说了要参加运算,再后来又一个问题:他这么确定的眼神给我搞得都有点懵逼,都吓得我打一段代码去验证一下结果没毛病,又巴拉巴拉给他讲了一通。我觉得应该可以了吧,结果在凌晨1.30的时候……算了,算了,这孩子没得救了,不管了。给女票滴滴打算晚安,但我也2020-08-01 21:47:182972
6
-
原创 数据结构与算法—最小生成树(Prim算法和Kruskal算法算法详解)
在图论中,最小生成树也是一种常用算法,本文将从一些有趣的例子和来讲诉最小生成树的prim算法和kruskal算法。中间也夹杂了马克思主义理论,!2019-10-18 18:45:396231
0
-
原创 数据结构与算法—图论之dfs、bfs(深度优先搜索、宽度优先搜索)
文章目录前言深度优先搜索(dfs)前言在有向图和无向图中,如果节点之间无权值或者权值相等,那么dfs和bfs时常出现在日常算法中。不仅如此,dfs,bfs不仅仅能够解决图论的问题,在其他问题的搜索上也是最基础(但是策略不同)的两种经典算法。并且五大经典算法的回溯算法其实也是dfs的一种。dfs,bfs基础能够解决搜索类问题的大部分情况,只不过搜索随着数据增大而呈非线性的增长,所以两种算法在...2019-09-05 23:19:324698
0
-
原创 数据结构与算法—哈夫曼树详解与构造
文章目录介绍介绍定义:给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。简而言之,就是按照一个贪心思想和规则进行树的构造,而构造出来的这个树的权值最小!其中WPL表示计算出的权值。至于为什么按照哈夫曼树方法构造得到的权重最小。这里...2019-09-02 00:33:306219
2
-
原创 数据结构与算法—拓扑排序
目录介绍拓扑排序算法分析介绍拓扑排序,很多人都可能听说但是不了解的一种算法。或许很多人只知道它是图论的一种排序,至于干什么的不清楚。又或许很多人可能还会认为它是一种啥排序。而实质上它是对有向图的顶点排成一个线性序列。至于定义,百科上是这么说的:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u...2019-09-08 18:28:2311382
4
-
原创 数据结构与算法—单源最短路径dijkstra算法
介绍对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或许,你曾经感觉它很难,那么,这个时候正适合你重新认识它。Dijkstra能是干啥的?Dijkstra是用来求单源最短路径的单源什么意思?从一个顶点出发,Dijkstra算法只能求一个顶点...2019-09-15 19:55:045310
2
-
原创 短小精悍的多源最短路径算法—Floyd算法
目录前言算法介绍前言在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的。在单源正权值最短路径,我们会用Dijkstra算法来求最短路径,并且算法的思想很简单——贪心算法:每次确定最短路径的一个点然后维护(更新)这个点周围点的距离加入预选队列,等待下一次的抛出确定。但是虽然思想很简单,实现起来是非常复杂的,我们需要邻接矩阵(表)储存...2019-09-28 11:48:175043
6
-
原创 【排序算法】计数排序引发的围观风波——一种O(n)的排序
前言计算机课上,老师给一串数字6 1 6 9 9 1 4 2 1 5 8 8,问道:这一串数字,你们写个程序给我看,要求效率较高。学不出来的别下课了。顿时场下一片哗然,但有很多小朋友硬着头皮啪啪啪的开始敲了。老师走到pigpian身边,pigpian很难得皱了皱眉头很难很难得写下了下面代码:int a[]= {6,1,6,9,9,1,4,2,1,5,8,8};for(int i=a.length-1;i>=0;i--){ for(int j=0;j<i;j++) { if2020-08-09 16:39:041322
0
-
原创 【排序算法】— 手写堆排序
前言在个人的专栏中,其他排序陆陆续续都已经写了,而堆排序迟迟没有写,趁着国庆假期的尾声,把堆排序也写一写。插入类排序—(折半)插入排序、希尔排序交换类排序—冒泡排序、快速排序手撕图解归并类排序—归并排序(逆序数问题)计数排序引发的围观风波——一种O(n)的排序两分钟搞懂桶排序对于常见的快排、归并这些O(nlogn)的排序算法,我想大部分人可能很容易搞懂,但是堆排序大部分人可能比较陌生,或许在Java的comparator接口中可能了解一点。但堆排序在应用中比如优先队列此类维护动态数据效率比较高2020-10-12 11:04:15505
2
-
原创 【排序算法】图解桶排序
前言在数据结构与算法的排序中,我们很多人可能更多的熟悉冒泡排序、快速排序、归并排序。可能对堆排序、桶排序、计数排数等比较生疏,其实这个也没啥复杂的,算法的排序中,我们很多人可能更多的熟悉冒泡排序、快速排序、归并排序。可能对堆排序、桶排序、计数排数等比较生疏,其实这个也没啥复杂的,桶排序是所有排序中最简单的排序之一。 没毛病老铁,就是最简单的之一。桶排序思想...2020-07-29 11:13:082509
6
-
原创 浅谈迷宫搜索类的双向bfs问题(例题解析)
前言在搜索问题中,以迷宫问题最具有代表性,无论是八皇后的回溯问题,还是dfs找出口,bfs找最短次数等等题目的问题。在我们刚开始ac的时候、可能有着很多满足感!感觉是个迷宫问题咱么都可以给他这么搜出来 !!然而,当数据达到一定程度,我们使用简单的方法肯定会爆炸的,****。就可能需要一些特殊的巧妙方法处理,比如各种剪枝、优先队列、A*、dfs套bfs,又或者利用一些非常厉害的数学方法比如康托...2020-02-15 00:21:143888
0
-
原创 硬核!手写一个优先队列
前言事情还要从一个故事讲起:对于上面那只可爱的小狗狗不会,本篇即为该教程,首先,我要告诉这只可爱的小狗狗,这种问题你要使用的数据结构为优先队列,每次操作的时间复杂度为O(logn),而整个过程的时间复杂度为O(nlogn).对于本片的设计与实现和堆排序可能有些相似,因为他们都借助堆来实现算法和数据结构,下面详细介绍优先队列的设计与实现。堆而堆就是一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树(完全)的数组对象。且总是满足以下规则:堆总是一棵完全二叉树每个节点总是大于(或小于)2020-10-22 09:25:59763
6
-
原创 回溯算法 | 追忆那些年曾难倒我们的八皇后问题
前言说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题……第一次遇到它的时候应该是大一下或者大二这个期间,这个时间对啥都懵懵懂懂,啥都想学却发现好像啥都挺难的,八皇后同样把那个时候的我阻拦在外,我记得很清楚当时大二初我们学业导师给我们开班会时候讲到的一句话很清晰:“如果没有认真的学习算法他怎么可能解出八皇后的代码呢”。确实,那个时候的我搞不懂递归,回溯也没听过,连Java的集合都没用明白,毫无逻辑可言,八皇后对我来说确实就是无从下手。但今2020-10-16 18:28:30534
0
-
原创 【排序】归并类排序—归并排序(逆序数问题)
文章目录前言归并排序(merge sort)逆序数结语微信公众号:bigsai数据结构与算法专栏前言在排序中,我们可能大部分更熟悉冒泡排序、快排之类。对归并排序可能比较陌生。然而事实上归并排序也是一种稳定的排序,时间复杂度为O(nlogn).归并排序是基于分治进行归并的,有二路归并和多路归并.我们这里只讲二路归并并且日常用的基本是二路归并。并且归并排序的实现方式有递归形式和非递归形式...2020-01-23 21:57:526018
0
-
原创 【排序】交换类排序—冒泡排序、快速排序手撕图解
交换类排序——冒泡排序、快速排序详解。无论是日后面试还是笔试的,排序在数据结构与算法中有着举足轻重的地位,所以还是决定把数据结构这个专题好好写写,多研究研究!今天和大家一起学习**交换类排序**——冒泡和快排详解!在排序中,**冒泡和快排是考察最多**的了,当然在实行上面`冒泡要相比快排简单很多`。理解起来也算得上是最简单的排序算法,而快排的话很多面试笔试都是**要求手撕**的,所以重要性不言而喻!2020-01-08 09:53:266217
0
-
原创 【排序】插入类排序—(折半)插入排序、希尔排序
前言在数据结构和算法中,排序是非常重要的一环,并且排序也是渗透编程的方方面面。你或许在写一个sql的order by按照某组进行排序,又或者你在刷一道题时候、常常遇到贪心+自定义排序求解的思路题,或者变态的面试官让你手写快排,又或者是app的姓氏升降序列 - - -然而在实际的排序算法的实现上,方式是众多的,不同算法对不同的特征数据的效率也是不同的,并且不同算法的时间复杂度、空间复杂度也不同...2019-11-15 17:24:418810
3