数据结构
非本人文章
活到老,学到老
展开
-
如何实现搜索引擎中的拼写纠错功能——思路
如何实现搜索引擎中的拼写纠错功能——思路原创 2022-06-26 23:14:45 · 751 阅读 · 1 评论 -
分治思想在海量数据处理中的应用
分治算法思想的应用是非常广泛的,并不仅限于指导编程和算法设计。它还经常用在海量数据处理的场景中。原创 2022-06-19 22:50:33 · 270 阅读 · 0 评论 -
好友关系存储-思路
用邻接表来存储这种有向图是不够的。因为我们去查找某个用户关注了哪些用户非常容易,但是如果要想知道某个用户都被哪些用户关注了,也就是用户的粉丝列表,就非常困难了原创 2022-06-12 23:53:07 · 427 阅读 · 0 评论 -
通过快排O(n)内查找第K大元素思路
O(n) 时间复杂度内求无序数组中的第 K 大元素。比如,4, 2, 5, 12, 3 这样一组数据,第 3 大元素就是 4。我们选择数组区间 A[0...n-1]的最后一个元素 A[n-1]作为 pivot,对数组 A[0...n-1]原地分区,这样数组就分成了三部分,A[0...p-1]、A[p]、A[p+1...n-1]。如果 p+1=K,那 A[p]就是要求解的元素;如果 K>p+1, 说明第 K 大元素出现在 A[p+1...n-1]区间,我们再按照上面的思路递归地在 A[p+1..原创 2022-05-29 22:34:43 · 501 阅读 · 0 评论 -
队列在线程池中的应用
线程池没有空闲线程时,新的任务请求线程资源时,线程池该如何处理?各种处理策略又是如何实现的呢?一般有两种处理策略。第一种是非阻塞的处理方式,直接拒绝任务请求;另一种是阻塞的处理方式,将请求排队,等到有空闲线程时,取出排队的请求继续处理。那如何存储排队的请求呢?我们希望公平地处理每个排队的请求,先进者先服务,所以队列这种数据结构很适合来存储排队请求。队列有基于链表和基于数组这两种实现方式。这两种实现方式对于排队请求又有什么区别呢?...原创 2022-05-22 20:40:35 · 259 阅读 · 0 评论 -
基于栈实现浏览器的前进后退功能-思路
使用两个栈,X 和 Y我们把首次浏览的页面依次压入栈 X,当点击后退按钮时,再依次从栈 X 中出栈,并将出栈的数据依次放入栈 Y。当我们点击前进按钮时,我们依次从栈 Y 中取出数据,放入栈 X 中。当栈 X 中没有数据时,那就说明没有页面可以继续后退浏览了。当栈 Y 中没有数据,那就说明没有页面可以点击前进按钮浏览了。比如你顺序查看了 a,b,c 三个页面,我们就依次把 a,b,c 压入栈,这个时候,两个栈的数据就是这个样子:当你通过浏览器的后退按钮,从页面 c 后退到页面 a 之.原创 2022-05-15 22:43:54 · 257 阅读 · 0 评论 -
基于链表实现LRU缓存淘汰算法-思路
如何基于链表实现 LRU 缓存淘汰算法?我的思路是这样的:我们维护一个有序单链表,越靠近链表尾部的结点是越早之前访问的。当有一个新的数据被访问时,我们从链表头开始顺序遍历链表。1. 如果此数据之前已经被缓存在链表中了,我们遍历得到这个数据对应的结点,并将其从原来的位置删除,然后再插入到链表的头部。2. 如果此数据没有在缓存链表中,又可以分为两种情况:如果此时缓存未满,则将此结点直接插入到链表的头部;如果此时缓存已满,则链表尾结点删除,将新的数据结点插入链表的头部。这样我们就用链表实现了一原创 2022-05-01 22:40:24 · 832 阅读 · 1 评论 -
数组为何从0开始编号?
为什么数组要从 0 开始编号,而不是从 1 开始呢? 从 1 开始不是更符合人类的思维习惯吗?原因:首先数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。并且计算机会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算机需要随机访问数组中的某个元素时,它会首先通过下面的寻址公式,计算出该元素存储的内存地址:a[i]_address = base_address + i * data_typ...原创 2022-04-24 22:48:35 · 1064 阅读 · 0 评论 -
复杂度分析
一、什么是复杂度分析?1.数据结构和算法解决是“如何让计算机更快时间、更省空间的解决问题”。2.因此需从执行时间和占用空间两个维度来评估数据结构和算法的性能。3.分别用时间复杂度和空间复杂度两个概念来描述性能问题,二者统称为复杂度。4.复杂度描述的是算法执行时间(或占用空间)与数据规模的增长关系。二、为什么要进行复杂度分析?1.和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强的特点。2.掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护原创 2022-04-17 23:49:13 · 1072 阅读 · 0 评论 -
【数据结构7】数组类算法摘抄笔记
数组作为算法面试中出现的高频数据结构。有很多经典的考点知识,比如排序问题,二分搜索等等。本篇文章主要介绍 LeetCode 中典型的数组类问题,主要介绍这类问题的一些常用解法:做好初始定义、基础算法思想应用、对撞指针、滑动窗口法等。做好初始定义做数组类算法问题的时候,我们常常需要定义一个变量,明确该变量的定义,并且在书写整个逻辑的时候,要不停的维护住这个变量的意义。也特别需要注意初始值和边界的问题。283. 移动零/** * @param {number[]} nums * @retu原创 2021-09-12 22:53:03 · 85 阅读 · 0 评论 -
【数据结构6】队列
1、基本常识1.1 什么是队列只允许在一端进行插入操作,而在另一端进行删除操作的线性表。1.2 队列的特点队列是一种先进先出的线性表,简称FIFO。2、队列的实现——数组用数组来实现的话问题就在于一个数组新创建出来长度就已经固定,所以在增删操作时就要不断新建新的数组,把原来复制过去,再进行增删。开始先定义新建一个数组public class arrayQ { private Object[] sa=new Object[0];}...原创 2021-09-05 22:19:42 · 172 阅读 · 1 评论 -
【数据结构-5】栈
1、基本常识1.1 什么是栈比如弹夹式手枪,向弹夹装子弹,最先装入的,会压到最底端。当子弹被射出时,最后放入的子弹会最先被射出。这种先进后出,后进先出的结构称为“栈”。1.2 栈的特点“先进后出,后进先出”。1.3 栈的操作栈的操作就两种,分别为出栈和入栈。那我们上边的例子,我们弹夹装子弹的过程称为入栈;我们发射子弹的过程称为出栈。2、栈的实现栈也是线性表的特例,所以也都能由数组和链表来实现栈的实现主要有两种,一种是数组的实现,叫做顺序栈,另外...原创 2021-08-29 22:07:13 · 174 阅读 · 0 评论 -
【数据结构-4】线性表-2
原创 2021-08-22 22:50:49 · 66 阅读 · 0 评论 -
【数据结构-3】线性表
原创 2021-08-08 23:47:22 · 50 阅读 · 1 评论 -
【数据结构-2】数据结构与算法
学习数据结构,通常都会结合到算法,因为只有通过算法,才能更深切的理解好数据结构。数据结构和算法的关系是相互依赖不可分割的。 本篇先概述下算法基本知识:...原创 2021-08-01 23:29:07 · 85 阅读 · 3 评论 -
【数据结构-1】确定方向:数据结构&算法
之前总是今天学点这,明天看点那,自己的知识总是零零散散的,不成体系,自己也没目标,比如学习一个内容,最终要达到什么效果才算掌握?今天和唐聊了聊,其实聊了好多次了。今天终于下定决心,有了定论:先学数据结构和算法。因为这是计算机技术的底层核心。有了底层逻辑,后续都是添砖加瓦了。 经过筛选,决定以《大话数据结构》为主要资料。开启踏踏实实的学习之路。 先梳理了一下本书的内容:包含数据结构和基础算法。 结合内...原创 2021-07-18 22:31:29 · 169 阅读 · 1 评论