自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 计组| CPU概述

中央处理器(Central Processing Unit, CPU)是计算机的核心,负责控制各部件协调工作、处理信息及异常情况,通过 “取指→译码→执行” 的循环持续运行。

2025-04-08 09:59:21 1075

原创 一百道编程题|13 扫雷

定义了 check 函数用于检查方案的合法性,并在主逻辑中调用该函数。要理解函数的参数传递、返回值以及函数的作用域等概念,掌握如何将复杂的逻辑封装到函数中,提高代码的可读性和可维护性。

2025-02-10 11:52:54 619

原创 排序算法总结

一、插入排序(Insertion Sort)一、插入排序(Insertion Sort)

2025-02-07 22:15:29 1564

原创 一百道编程题| 12 Cities and States

对于每一组读取到的城市信息,将州代码和城市名称前两个字母组合成一个字符串,如 sta + cit,查询 mp 中该字符串对应的数量,将其累加到 ret 中,这一步是统计之前已经出现过的符合特殊城市对关系的数量。然后将本次的城市记录,名称前两个字母和州代码组合成另一个字符串,如 cit + sta,以便后续判断是否能构成特殊城市对。在读取每个城市名称和所在州代码后,取城市名称的前两个字母作为关键信息,若该关键信息与所在州代码相同则跳过,因为不符合特殊城市对的条件,特殊城市对要求来自不同州。

2025-02-06 22:52:59 368

原创 一百道编程题| 11 第k小整数

遍历输入的 n 个正整数,对于每个数 x,若 st[x] 为 true,说明该数已出现过,直接跳过;小根堆的特点是每个节点的值都小于或等于其子节点的值,堆顶元素是整个堆中的最小值;大根堆则相反,每个节点的值都大于或等于其子节点的值,堆顶元素是最大值。在本题中,使用大根堆来高效地维护和获取较大的数。将去重后的整数依次加入小根堆中。加入完所有去重后的整数后,若堆中元素个数小于 k,说明不存在第 k 小的数,输出 NO RESULT;若堆中元素个数等于 k,则堆顶元素即为第 k 小的数,输出堆顶元素。

2025-02-04 17:48:46 527

原创 一百道编程题| 10 二叉树

分别从两个节点向上遍历到根节点,记录路径上的节点。两个节点到最近公共祖先的距离之和就是它们之间的距离,这里距离的计算按照题目规定,向上到根节点的边数两倍加上向叶子节点的边数。本题明确根节点为一号节点,在代码实现中要基于此假设进行操作,若题目未明确根节点,需先找出根节点(如没有父节点的节点为根节点)。严格按照题目中给定的节点间距离计算规则进行计算,即从u到v的最短有向路径上向根节点的边数的两倍加上向叶子节点的边数。在树或图中,两个节点的最近公共祖先是指同时是这两个节点祖先的节点中离根节点最远的节点。

2025-02-03 20:03:03 1113

原创 一百道编程题|09 前序遍历

一、明确题目要求题目给出一棵二叉树的中序与后序排列,要求求出它的先序排列。树结点用不同的大写字母表示,长度≤8。二、核心思路 - 递归与序列划分确定根节点:后序序列的最后一个元素是根节点。划分左右子树:以根节点为界,将中序序列划分为左右子树的中序序列。再根据中序序列的划分,在后序序列中找到对应的左右子树的后序序列。递归求解:对左右子树使用递归,不断重复上述过程,直至处理完所有子树,得到整棵二叉树的先序序列。三、代码实现要点递归函数定义:定义递归函数dfs,参数为中序和后序序列的起始和结束下标。

2025-02-02 18:45:48 386

原创 树的广度优先遍历

add函数接收节点a和b,添加从a到b的边,并更新链式前向星数据结构。(由于树是无向图,需同时添加反向边)

2025-01-30 23:18:14 501

原创 一百道编程题|08 海港问题

移除时,如果该乘客所属国家的剩余乘客数量变为0,说明该国家不再有在统计时间范围内的乘客,我们将不同国家数量减1。如果该值为0,说明之前未统计过该国家的乘客,我们将不同国家数量加1,并将该国家的乘客数量加1。当每艘船到达港口时,我们将船上所有乘客的信息依次加入到队列中。编写代码时,我们需要注意输入数据的范围,如船的数量、乘客数量、时间等的范围,并选择合适的数据类型,以确保不会出现数据溢出等问题。在判断乘客是否在统计时间范围内时,应使用当前船的到达时间减去队列头部乘客的到达时间,而不是队列中其他元素的时间差。

2025-01-29 22:33:42 219

原创 一百道编程题|07 机器翻译

算法思想:模拟算法,按照题目给定的翻译软件工作原理,模拟内存的使用和单词的查找、存储过程。数据结构:队列用于模拟内存,布尔类型数组用于快速判断单词是否在内存中。处理好内存已满时,替换最早进入内存单词的逻辑,确保顺序正确。的数组或数据结构来模拟内存,记录内存中已存储的单词。对单词是否在内存中的判断,可使用布尔类型的的辅助数组。查找,避免每次都遍历内存数组。初始化一个长度为 M。

2025-01-29 20:05:33 262

原创 一百道编程题|06 后缀表达式

​​​​​​​一、思路分析遍历字符:从左到右逐个字符地遍历输入的后缀表达式字符串。操作数处理:当遇到操作数时(即非运算符字符),将其解析并转换为整数,然后压入栈中。运算符处理:当遇到运算符时,从栈中弹出两个操作数(先弹出的是右操作数,后弹出的是左操作数),根据该运算符进行相应的计算,并将计算结果压回栈中。重复操作:不断重复上述操作,直到遍历完整个字符串。得出结果:最后栈中剩下的唯一元素就是后缀表达式的计算结果。二、求解三、注意的点。

2025-01-28 21:34:11 246

原创 一百道编程题|05 验证栈序列

本题的核心任务是验证一个给定的出栈序列是否能由对应的入栈序列通过合法的栈操作得到。解题的主要思路是模拟栈的入栈和出栈过程,根据出栈序列的顺序动态执行操作。本题主要使用了栈的入栈(push)和出栈(pop)操作。当入栈序列遍历完毕后,如果栈为空且出栈序列也遍历完毕,说明出栈序列是合法的;在验证栈序列时,需要根据这个特性来模拟入栈和出栈的过程。在栈操作过程中,入栈和出栈是可以交替进行的,而不是先把所有元素都入栈,再开始出栈。使用循环来遍历入栈序列和出栈序列,使用条件判断来决定是否执行入栈或出栈操作。

2025-01-28 18:49:13 397

原创 一百道编程题|04 有效括号

利用栈的后进先出特性处理括号匹配问题。遍历字符串时,遇到左括号则压入栈中;遇到右括号时,检查栈顶元素是否为对应的左括号,若是则弹出栈顶元素表示匹配成功,否则或栈为空时表示括号不匹配。遍历结束后,若栈为空则所有括号匹配正确,字符串有效;

2025-01-28 13:20:51 320

原创 一百道编程题|03 约瑟夫问题

一、思路分析可以通过模拟的方法来解决这个问题,具体实现步骤如下:我们用一个数组 ne 来模拟这一圈人,其中 ne[i] 表示编号为 i 的人的下一个人的编号。首先,初始化环形结构。对于每一个人 i(1 ≤ i < n),设置 ne[i] = i + 1。对于最后一个人 n,设置 ne[n] = 1,从而形成一个闭环。接下来,开始模拟报数的过程:设定当前位置为 n,ne[n]表示从第一个人开始。

2025-01-27 18:21:17 364

原创 一百道编程题|02 The blocks problem

使用 pair<int, int> 类型 PII 来表示木块的位置信息,其中第一个元素为槽编号,第二个元素为木块在槽中的索引。从目标木块的下一个位置开始遍历槽中的木块,依次放回其对应的初始槽中,并调整槽的大小。从目标木块开始遍历槽中的木块,依次添加到目标槽的末尾,并调整原槽的大小。初始化时,从输入获取木块数量 n,然后通过循环将每个木块放入对应的槽中,即 p[i].push_back(i)。设计 find 函数,通过两层循环遍历所有槽和槽中的木块,找到目标木块时返回其位置信息。把a及以上的木块放b上。

2025-01-26 13:18:49 1315

原创 一百道编程题|01 合并两个数组

比较 nums1[cur1] 和 nums2[cur2] 的大小:如果 nums1[cur1] 小于等于 nums2[cur2],将 nums1[cur1] 放入 temp[cur],然后 cur1 自增,cur 自增。nums1的初始长度为m加n,其中前m个元素是有效的,而后n个元素为0,这些0元素在合并过程中需要被nums2中的元素替换或覆盖。初始化三个指针:cur1 指向 nums1 的起始位置,cur2 指向 nums2 的起始位置,cur 指向辅助数组 temp 的起始位置。

2025-01-25 20:56:13 390

原创 vector

举个例子,如果我们有一个 int 类型的 vector 容器 b1,初始大小为5,且所有元素都被初始化为1,即 vectorb1(5, 1);因此,修改后的 b1 容器中的元素依次是 1, 1, 1, 1, 1, 0, 0, 0, 0, 0。在竞赛中如果要用到动态顺序表,C++的STL为我们提供了已经封装好的容器——vector(可变长数组),vector的底层就是一个会自动扩容的顺序表,其创建和增删查改的逻辑已经实现好了,并完成了封装。会遍历整个元素,一个个删除,因此时间复杂度是O(n)级别的。

2025-01-25 13:11:30 374 1

空空如也

空空如也

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

TA关注的人

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