自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 收藏
  • 关注

原创 数据结构_深入理解堆(大根堆 小根堆)与优先队列:从理论到手撕实现

本文系统介绍了堆数据结构及其应用。首先阐述了大根堆和小根堆的概念与特性,强调其完全二叉树结构和父节点与子节点的大小关系。其次详细讲解了优先队列的实现原理,包括其核心操作(插入、删除、访问)和基于堆的高效实现方法。最后通过代码示例展示了手写优先队列的关键实现细节,包括向上/向下调整、堆排序等算法。文章内容覆盖了堆的理论基础、操作特性和实际应用,为理解和使用这一重要数据结构提供了全面指导。

2025-10-28 17:04:35 926

原创 数据结构_哈夫曼编码(Huffman)完整指南:从原理到实现,附考研真题详解

哈夫曼编码是一种基于字符频率的最优变长无损压缩算法,通过构建哈夫曼树实现。其核心思想是高频字符使用短编码,低频字符使用长编码。本文详细分析了哈夫曼编码的实现过程,包括构建哈夫曼树和提取编码的算法逻辑。构建哈夫曼树的时间复杂度为O(N^2),采用贪心策略每次合并频率最小的两个节点。文章还提供了完整的C语言实现代码,可计算WPL和加权平均编码长度,展示了哈夫曼编码的高效性和实用性。

2025-10-03 20:52:38 1423 1

原创 数据结构_ 二叉树线索化:从原理到手撕实现

二叉树线索化技术利用空指针存储遍历顺序中的前驱/后继信息,解决了普通二叉树遍历效率低和空指针浪费问题。通过增加ltag/rtag标志位区分真实指针和线索指针,中序线索化过程递归地为每个节点建立前驱(左线索)和后继(右线索)。代码实现时需注意递归处理左右子树的条件,并维护前驱节点指针。线索化后的二叉树可实现高效遍历,无需递归或栈,直接通过线索指针访问前驱/后继节点。

2025-09-28 17:18:46 874

原创 数据结构_二叉树其实很简单:图文+代码双重暴击

本文介绍了二叉树的基本概念和代码实现。主要内容包括:二叉树的定义(每个节点最多两个子树且有序)、完全二叉树和满二叉树的区别。代码部分展示了二叉树的结构定义、结点获取、插入、销毁操作,以及BFS层序遍历和DFS前中后序遍历的实现。通过数组模拟队列实现BFS,使用递归实现DFS遍历。文章提供了完整的C语言代码示例,帮助理解二叉树的基本操作和遍历方式。

2025-09-23 01:24:57 533 1

原创 MySQL数据库基础(DCL,DDL,DML)详解

本文系统介绍了MySQL数据库的基础知识,分为四大模块:数据库概述、DCL权限控制、DDL数据定义和DML数据操作。详细讲解了MySQL的定位、SQL语言三大支柱(DDL、DML、DCL),并通过实例演示了用户创建、权限管理、表结构操作(创建/修改/删除)以及数据增删改查等核心操作。特别强调了DCL权限管理的重要性,并通过用户创建和权限授予的完整示例,展示了如何实现精细化的权限控制。内容涵盖MySQL从入门到实践的必备技能,为数据库开发打下坚实基础。

2025-09-05 16:48:44 758

原创 数据结构_栈(C语言实现)超详细_Leetcode_20. 有效的括号

栈结构实现与应用 本文介绍了栈的基本概念、实现方法及其应用。栈是一种后进先出(LIFO)的数据结构,可通过数组实现。文章详细讲解了栈的初始化、压栈(push)、弹栈(pop)、判空(empty)、判满(isFull)等基本操作函数,并给出了完整的C语言实现代码。最后通过LeetCode 20题"有效的括号"展示了栈的实际应用,利用栈结构检查括号是否匹配。 关键点: 栈的基本操作实现 固定大小栈的实现方法 栈在括号匹配问题中的应用 提供完整可运行的C语言代码示例 栈作为基础数据结构,在程序

2025-09-05 01:51:52 424

原创 Leetcode_175.组合两个表

我们没有照顾到 city 为 null 的人,每个人都必须照顾到,也就是所选表中的字段必须全部照顾到,查看Person表,我们需要照顾Person表中的每一个人,也就是每个人都必须要查询到,此时,就使用到了左链接。观察到,Person表和Address表通过personId关联,所以这就是我们联查的条件。通过查看输出,最后需要得出。

2025-09-04 23:11:01 366

原创 2020年_408统考_数据结构41题

本文提出了一种高效算法来计算三个有序数组中元素组成的三元组的最小距离。算法采用三指针法遍历数组,每次计算当前三个元素的距离D=|a-b|+|b-c|+|c-a|,并选择最小值所在数组的指针前进。通过不断更新最小距离,最终得到最优解。该算法的时间复杂度为O(m+n+k),空间复杂度为O(m+n+k),其中m、n、k分别为三个数组的长度。这种方法避免了暴力枚举,利用有序数组的特性实现了高效计算。

2025-09-04 22:48:14 1282

原创 Leetcode_202.快乐数_三种方法解决(普通方法解决,哈希表解决,循环链表的性质解决_快慢指针)

当本次循环快指针不为 1 时,代表还没有找到快乐数,所以要继续循环变换寻找,一旦快指针等于 1 ,就代表找到了,此时退出循环,直接返回true,当快指针不为1 时,快指针变换两次,慢指针变换一次,变换完毕之后进行判断,如果 快指针等于慢指针 并且 快指针不等于 1 ,就证明快慢指针相遇了,数字 n 的变换过程存在一个环,所以一定不是快乐数,直接返回false;这道题的核心还是getNext()这个函数,要求返回当前数每个数字的平方和,主要就是将一个数字拆开,还是挺好想到的。判断完之后,更新n的值。

2025-09-03 17:30:12 566

原创 数据结构_循环队列_牺牲一个存储空间_不牺牲额外的存储空间 Circular Queue(C语言实现_超详细)

本文介绍了循环队列的概念及其两种实现方式:牺牲一个存储空间和不牺牲空间。通过对比普通队列和循环队列的操作效率,指出循环队列通过模运算实现空间复用,避免了普通队列出队时整体移动元素的时间开销。重点分析了两种实现方式的判断条件差异:牺牲空间方式通过数学关系判断队列状态,不牺牲空间方式则需维护额外计数器变量。文章通过具体例题演示了两种实现的操作过程,并提供了不牺牲空间方式的代码实现,包括初始化、入队、出队等核心操作,展示了循环队列在空间利用和操作效率上的优势。

2025-09-03 14:47:34 1630 2

原创 Leetcode_206.反转链表(递归)

本文介绍了使用递归方法反转链表的思路。关键点在于:1)递归终止条件是链表为空或只有一个节点;2)递归调用参数为head->next,逐步向尾部推进;3)回溯过程中通过head->next->next=head反转指针方向。代码实现时需保存tail=head->next节点,在回溯时调整指针指向,最终返回新链表头节点。该方法通过递归从后向前处理节点,时间复杂度O(n),空间复杂度O(n)。

2025-09-02 20:51:57 380 1

原创 数据结构_队列Queue(C语言实现)

本文介绍了队列(Queue)的基本概念和C语言实现。队列是一种先进先出(FIFO)的线性数据结构,主要操作包括:初始化(initQueue)、判空(empty)、入队(push)、出队(pop)和获取队头元素(Front)。文章采用分层设计思想,将底层存储抽象为vector结构,通过组合方式实现队列功能。代码实现包含队列的初始化、扩容检查、基本操作函数以及内存释放等完整功能,并提供了测试用例验证队列操作的正确性。每个函数都包含错误处理,确保程序健壮性。

2025-09-02 14:35:31 399

原创 Leetcode_1780.判断一个数字是否可以表示成三的幂的和

此题第一眼是不是想到了动态规划?在题目要求中 3次幂之前是没有系数的,所以不能让其为 2 ,为 1 和 0的话可以省略这个系数或者直接跳过这一次幂。回到 12 将其不断除以 3 ,三进制为不断向前,判断每一位是否为 2。所有的非负整数都可以表示为不同的2的幂次方的和。这是二进制系统的基本性质。可以看到,除以2 之后二进制的向前挪动了一位,基于此性质,回到题目中。我们要做的就是每位数都为 0 或者 1 ,为什么呢?题目中为 3 的次幂相加,所以将其转为 3 进制。此时将 12 除以 2 得到 6。

2025-08-14 12:53:54 251 3

原创 Maven配置,Idea集成Maven_依赖引入,Idea生成单元测试

创建之后是这个样子,在资源管理中,src下的main目录下的Java目录存的是我们的核心代码,Test目录写的是我们测试的代码(后面会展示),写个Hello world来测试一下,能不能正常输出。如果私服未缓存,且配置了中央仓库代理(如 repo.maven.apache.org),私服会从中央仓库下载并缓存到私服,再返回给本地。在本地仓库中没有的话就会显示红色,点击Maven的刷新,Maven就会从私服中下载到这个依赖存入到本地仓库。输入标签,我们可以在这个标签中引入依赖,下来我们进入依赖的网站。

2025-08-04 16:23:29 1100 2

原创 Leetcode_349.两个数组的交集

这道题的意思很明确,就是让寻找两个数组中的共同元素,并去重,由此可以联想到哈希表的特性,注意到题目给的数据范围,在1000以内,所以本题可以使用 STL 的库函数,也可以使用数组进行模拟。本题要求去重的交集,因此选用unordered_set。相比于set(红黑树实现,O(log n)查找),unordered_set(哈希表实现,平均O(1)查找)在效率上更优。

2025-07-28 23:58:20 3043

原创 Leetcode_242.有效的字母异位词

统计出现的个数我们想到了哈希表,这道题由于是关联了字母和出现的次数,所以首选map类型的容器,由于map底层是红黑树实现,查找效率过于慢,这里我们使用unordered_map,底层是哈希实现,查找速度更优。总体思路差不多,需要注意的是 在ascill码表中,a代表的是97,我们这里将其减去97是为了对应数组的0号索引,同时z对应了数组的25号索引。但是这种方法的效率比较低,由于这道题只有小写字母,小写字母只有26个,因此我们可以使用数组来模拟哈希表,进一步的提升效率。

2025-07-28 18:30:47 393 1

原创 Java_多线程_生产者消费者模型_互斥锁,阻塞队列

本文介绍了生产者消费者模型的两种Java实现方式。该模型通过缓冲区协调生产者和消费者以不同速度运行的问题。第一种使用synchronized同步机制实现,通过共享变量控制食物状态,厨师和顾客线程互斥访问缓冲区;第二种采用阻塞队列(ArrayBlockingQueue)实现,利用队列自动处理同步问题。两种方式都实现了基本功能:当缓冲区空时消费者等待,满时生产者等待,确保线程安全。文中提供了完整的代码示例,包括Desk、Cook、Customer三个核心类,展示了多线程环境下的同步控制机制。

2025-07-24 18:58:50 549 1

原创 第十六届蓝桥杯_省赛B组(D).产值调整

第十六届蓝桥杯_省赛B组(D).产值调整

2025-06-16 21:50:11 494

原创 第十六届蓝桥杯_省赛B组(C).可分解的正整数

第十六届蓝桥杯_省赛B组(C).可分解的正整数

2025-06-16 21:10:09 331

原创 leetcode_283.移动零

本道题采用双指针的思想完成,可以使用快慢指针的思想,通过快指针遍历数组找出数组中的非零元素,用慢指针来维护有效值。可以先根据题目的条件手搓出来一个测试,方便理解。没错是这样的,这样就找到了数组中所有不为。,最终遍历完毕,fast最后指向了索引。号索引,开始向后找,一旦发现不为。的数字进行交换,第一次找到了。索引处,第一次发生在索引为。的时候,经过操作,得到了。,slow最后指向了索引。的时候,经过操作得到了。的时候,经过操作得到了。,第二次发生在索引为。,第三次发生在索引为。向前遍历,当找到不为。

2025-06-11 16:02:35 430 1

原创 Java_try...catch(异常)

catch中是空指针异常,最后输出的还是数据索引越界异常,而且程序没有正常结束,由此得出,捕获异常之后没有与之对应的catc就会交给虚拟机来进行处理。当try代码遇到问题,之后的代码就不会执行了,直接跳转到对应的catch,如果没有对应的catch与之匹配,则交给JVM虚拟机处理。第一个情况 ,就是我们在使用try捕获异常时,如果try中没有异常出现,我们就会一直执行代码,并且不会执行catch中的代码。由最后的结果我们知道,其实只执行了数组索引异常的处理,由此引出我们的第三种情况。

2025-06-11 01:38:28 333

原创 第十四届蓝桥杯_省赛B组(C).冶炼金属

第十四届蓝桥杯_省赛B组(C).冶炼金属

2025-06-10 18:53:07 1309

原创 leetcode_35.搜索插入位置

暴力的代码我来说一下,主要就是遍历整个数组,通过寻找第一个大于等于target的值,等于的话就是找到了这个元素,直接返回其下标,大于的话等于就是这个元素必须插入到这里。最后循环结束,没有找到的话,表明target大于数组中的所有元素,返回这个数组最后一个位置就Ok了。首先这个题暴力也可以过,但是题目要求我们使用O(log n)时间复杂度的算法,所以我们这道题还是试用二分的方式来解决,依旧是往期的两个模板,这里我们都写一下。

2025-06-10 15:03:59 330

原创 leetcode_69.x的平方根

对于刚好等于的我们直接返回 即可 ,对于有小数的我们就需要想一下了,例如 8 的 话 2 * 2等于4 3 * 3 等于9,那么根据题目我们就需要找到2和3,然后返回2作为答案,这样的话也是可以过的(不过需要注意的是 ,需要使用long long 哦,去最坏情况的话 i =INT_MAX也就是2的31次方减一,再做乘法的话会超出int的取值范围,造成 上溢的情况 ),不过算法复杂度是O(N),有点高了,我们下来尝试着用二分法去优化一下。左闭右闭的话,那么我们应该是小于等于的,为什么呢?

2025-06-09 01:38:47 278

原创 leetcode_66.加一

2.下来我们就可以对这个数组进行处理了,因为只加一 ,我们的个位最大为10,然后依次向上进位,判断我们每一位的数字,如果数字大于等于10的话 ,那我们就令高位加一 ,同时使本位减10.这里需要注意的是,我们最高的一位需要最后特殊处理 ,我们在判断的过程中并不能直接给后面添加一位,所以我们这一步的代码也就得到了;题是这样的,根据题目我们不难理解,这个题就是在最后一位加 1 然后返回,正如示例所说的那样,当然这很符合我们人的思维,写这种算法题最重要的就是考虑一些极限的情况,例如。

2025-06-08 01:54:00 348

原创 数组模拟栈

本文介绍了栈的基本概念和STL中stack容器的使用方法。栈是一种先进后出的数据结构,STL提供了push()、top()、pop()和empty()等基本操作。通过代码示例演示了栈的特点,包括压栈、查看栈顶元素和弹出操作,并强调了使用empty()判断栈空的重要性。最后给出了用数组模拟栈的完整实现代码,包含push、pop、empty和query等操作。文章结合图示和代码示例,清晰地展示了栈的工作原理和实际应用。

2025-04-04 17:05:44 339

原创 基础算法_二分

二分

2025-03-31 13:04:23 299

原创 c++高精度减法

C++高精度减法

2025-03-23 19:04:40 402

原创 c++高精度加法

高精度加法

2025-03-23 18:22:15 521

原创 手搓递归实现组合型枚举地柜搜索树 组合的输出(dfs) 回溯分析

dfs回溯分析!!!!!!!

2025-03-16 18:09:17 312

原创 手搓排列型枚举递归搜索树 全排列问题(dfs)

全排列问题+递归搜索树

2025-03-16 16:08:31 197

原创 手搓递归搜索树 指数型枚举(dfs)

dfs指数型枚举

2025-03-16 14:59:22 285 2

原创 priority_queue练习

分析问题:就是每一次从菜篮子中拿掉最大的菜,然后丢掉,问操作完成之后篮子里的菜的重量。“2”,将菜篮子中重量最大的菜丢掉(如果菜篮子为空,则跳过)。Q次操作后,菜篮子中剩下的菜的总重量。注意,需要开 long long。“1 x”,将一个重量为。x的菜放入到菜篮子中。

2025-03-07 20:24:55 242

原创 优先队列priority_queue应用

优先队列 priority_queue 换种话来说就是堆,只可以从中取到最大或者最小的值,所以说,只维护堆顶。它使用less()作为比较函数,即元素的优先级按照从大到小的顺序排列。也就是说,如果我要取最大值,那么我就不管(使用其默认的less),我要取最小值,那么就要使用greater()如果我们使用greater的话那么每次就会找到这个堆的最小值,我们可以用这个方法找出数组或者vector容器中的最大最小值,或者给数组或者容器排序。

2025-03-07 20:03:16 388

原创 2024蓝桥杯省赛真题-封闭图形个数

拿到题目,咱们先来分析一手,上来就是封闭图形,那我们直接将这个封闭图形用一个数组记录下来,根据题目要求,我们得到了st数组这就是0-9数字的封闭的数字然后下一段,分析一下,它们的封闭图形个数不同,那么封闭图形个数较多的数更大,反之就是值大的数大,如果值相同,就是相等的,就不用排序了最终输出排序后的结果现在我们来想,我们这个st数组只记录了一个数字的封闭值,让如果是两位数,三位数呢?OK 啊,我们直接把他们拆开分别计算不就 好了嘛!!说干就干,开搞,这道题的最大范围是 2e5 一定要看清楚题目的数据范围!

2025-03-02 14:41:33 619

原创 蓝桥杯(握手问题)

从图片中,我们可以看出来,总共50个人,第一个人和除了他自身之外的别人握手,总共握了49次(蓝色),第二个人握了48次(黄色)一直到最后一个人,最后一个人就不用主动去握手了,因为别人已经全和他握过手了。小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。开始分析:总共有 50 个人,每个人都要和除了自己以外的其他人握手,但是呢就是有7个劳弟互相不想握手,让我们算最后握了多少次手。这样我们就算出了50个人的握手总数,用相同的办法,我们可以算出7个人的握手总数,然后作差,就得到了我们最终的答案。

2025-02-28 19:24:12 1006 1

原创 火车轨道问题_c++STL stack(栈)的使用

stack(栈)

2025-02-26 01:54:07 267

原创 洛谷P5736 【深基7.例2】质数筛

P5736 【深基7.例2】质数筛

2025-02-07 01:29:18 212

原创 洛谷P2367 语文成绩

洛谷P2367 语文成绩

2025-02-07 01:16:12 199

原创 基础算法_差分

一维差分

2025-02-07 00:54:26 529

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除