
数据结构与算法
文章平均质量分 89
数据结构与算法的基础学习
叮当猫学编程
爱好编程的哆啦A梦
展开
-
【Java】轻松掌握散列表操作
轻松掌握散列表操作4.1 Word和判断单词拼写错误4.2 同义词字典4.3 hash冲突4.4 LRU缓存算法实现4.1 Word和判断单词拼写错误在工作中,可能会遇到 Word 单词拼写错误的提醒,如下图:在 Office Word 中书写英文单词时,如果有单词拼写错误,word 工具便会如上图一样自动给错误单词加上下划线这个逻辑是如何实现的呢?这时可能会想到,可以利用数组存储所有的单词,然后每次遍历所有的单词,查看单词是否准确。这种线性查找的时间复杂度为 O(N),接着可以利用二分查找原创 2022-03-31 09:00:00 · 562 阅读 · 0 评论 -
【Java】轻松掌握队列操作
轻松掌握队列操作3.1 如何实现一个排队系统3.2 队列的数组实现3.3 队列的链表实现3.1 如何实现一个排队系统在日常生活中,处处都能看到排队。在银行、医院这种场景中还会加入排队系统,通过系统叫号的方式解决拥堵问题。在虚拟游戏世界中,为了服务器限流,也会加入一些排队策略。这样的排队列表用的就是数据结构中的 —— 队列(queue) 存储队列和栈一样,都有约束条件,不同的约束条件决定它们的不同的使用场景队列和排队非常类似,大家排成一排就像队列存储的元素,以食堂打饭举例,永远是排在最前面的人先离队进原创 2022-03-29 17:53:49 · 2442 阅读 · 4 评论 -
【Java】轻松掌握栈的基本操作
轻松掌握栈的基本操作1、栈的基本概念2、栈的实现3、栈常见的算法题目1、栈的基本概念如何理解栈对于栈,首先列举一个生活案例,家里的厨房通常都放有很多盘子。每次洗好的盘子总是堆叠在一起,如图所示,ABC三个盘子:我们在洗碗的时候,先洗好的放在下面,后洗好的放在上面反过来每次使用盘子的时候,总是先拿上面的盘子,后拿下面的盘子如果用专业术语表示,则为:后进先出、先进后出,这就是栈的特性2、栈的实现栈的使用场景非常广泛,所以在编程各类语言中都有栈的实现,例如在 Java 中,栈的数据结构类是原创 2022-03-28 15:24:22 · 8663 阅读 · 1 评论 -
【Java】轻松掌握链表操作
基于节点的数据结构——链表1.1 什么是链表1.2 链表的读取与查找1.3 链表的插入1.4 链表的删除1.5 链表 vs 数组1.1 什么是链表在数组存储的过程中,数组的存储必须使用连续的内存空间,并且会预留一部分空间方便扩展。这样在内存中会大大降低内存的使用率,这种事情是不被接受的。所以出现了一种新的数据结构,叫作——链表综上可知:链表的发明其实是对数组的一种补充。因此它的功能和数组非常类似,都是用于存储一系列相同类型的数组,并且都有增删改查等基本操作用一句话来总结:数组能做的所有事情,一般原创 2022-03-25 19:40:34 · 2356 阅读 · 0 评论 -
四步轻松掌握数组基本操作
小橘子学数组1、计算机内存管理2、数组的存储和读取3、数组的插入和删除4、总结1、计算机内存管理我们每天都在面对着如电脑、手机等电子产品,每一台电子设备都有自己的内存大小,如:64G、256G、512G甚至更多内存到底有什么作用呢?简单来说,计算机的程序都是运行在内存中的那么内存是如何存储的呢?我们可以简单的将内存当作寄存柜假设一家人要去逛超市,身上共带有四个小包,需要将身上的东西放在四个储物柜中。每个储物柜都有自己对应的编号,方便我们去查找和记录。逛完超市后,再从这四个储物柜中将东西取走原创 2022-02-10 23:59:00 · 645 阅读 · 2 评论 -
轻松拿下插入排序
轻松拿下插入排序!!!1、插入排序2、优化插入排序 - 二分插入排序1、插入排序什么是插入排序?重点在插入,每次抽离一个元素当作临时元素,依次比较和移动之后核心规则:在第一轮,抽离数组末尾倒数第二个元素,作为临时元素用临时元素与数组后面的元素进行对比:如果后面的元素值小于临时元素,则后面的元素左移如果后面的元素大于临时元素,或者已经移动到数组末尾,则将临时元素插入当前的空袭中重复上面的步骤,完成排序此处的核心逻辑是通过每次的迭代,将部分元素排好序,经过一定次数的迭代之后,实现最终原创 2022-02-14 13:52:05 · 446 阅读 · 0 评论 -
轻松理解递归的基本思想
轻松理解递归思想!!!1、递归相关概念2、递归的实现1、递归相关概念我们先来看一个耳熟能详的故事:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事,故事的内容是:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事,故事的内容是:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事,故事的内容是:…我们发现,这个故事有个特点:不断地循环自身。这就是递归。递归式编程世界中一个非常重要,也特别难的概念,同时它也是算法的基础。很多复杂的问题,如果去使用递归的思想去思考,会发现简化原创 2022-02-21 22:44:58 · 599 阅读 · 0 评论 -
算法性能优化之二分法与二次问题
性能优化小案例1、二分法查找有序数组查找有序数组是什么?如果一个数组中的值是按一定顺序排列的,我们就称为有序数组例如:数组 [2, 8, 15, 24, 66, 88, 100]现在希望完成一个函数来实现:查找某个数字是否存在数组中。例如:24 存在数组中,索引值是 3,1000 不在数组中线性查找方法一:我们使用暴力查找方法,通过遍历整个数组来判定该数字是否存在public static int orangeFind(int[] array, int aim) { fo原创 2022-02-10 10:00:00 · 846 阅读 · 0 评论 -
轻松拿下冒泡排序与选择排序
轻松掌握冒泡排序与选择排序冒泡排序选择排序冒泡排序一个数组如何编程有序数组呢?需要排序算法冒泡排序是最基础,最经典的排序算法,为什么叫作冒泡呢?冒泡:水里有很多气泡,这些气泡都会慢慢升起,冒出水面,越大的气泡升起的速度就越快,因此:对于一个数组,每一次循环让最大的元素冒泡到最后面核心规则:指向数组中两个相邻的元素(最开始是数组的头两个元素),并且比较他们的大小如果前者比后者大,则交换他们的位置如果后者比前者大,则不交换然后依次后移,每次循环将最大元素移动至最后一个位置举例原创 2022-02-13 00:00:31 · 439 阅读 · 0 评论 -
数据结构与算法之复杂度三步走
1.1 大O记法计算机怎么判断程序性能?我们都知道,编程基本上是在和数据打交道,大多数程序基本都在处理获取数据、查询数据、操作数据、返回数据相关的逻辑因此出现了数据结构和算法,这两者出现本质为了解决如何能够更快、更省进行数据处理更快:程序运行时间更短,对应的指标我们称之为时间复杂度更省:程序运行所消耗的内存更少,对应的指标我们称之为空间复杂度为什么需要复杂度?我相信,大家第一眼看到程序运行时间更短,消耗的内存更少这句话,第一反应通过开始运行和结束运行两个时间点差额和内存使用情原创 2022-02-09 18:03:05 · 535 阅读 · 0 评论 -
轻松拿下快速排序
快速排序!拿下!!!快速排序是现在编程语言自带排序函数中,使用的最多的算法例如常见的:List.sort()同时,也是面试最喜欢面试的排序算法,没有之一实现的原理、复杂度都有一定的难度接下来我们来看看快速排序的实现原理:在快速排序中,首先我们会随机选中一个数字当作轴,目标是将原始数组根据轴进行分区分拆,比轴小的放在左边,比轴大的放在右边。那么该如何做到这一点呢?如下:首先,给定一个原始数组 1, 6, 4, 2, 5, 3。第一步,我们选择哪个数字为轴呢?理论上选择任意值都可以,在这里原创 2022-03-19 21:04:52 · 126 阅读 · 1 评论