- 博客(69)
- 问答 (2)
- 收藏
- 关注
原创 LeetCode刷题实战:删除字符串中的所有相邻重复项(栈的经典应用)
栈是处理相邻元素匹配问题的核心数据结构,通过维护“已处理序列”的状态,避免暴力解法中的重复扫描。本题与“有效括号”(LeetCode 20)的实现异曲同工,均通过栈的及时弹出来确保数据的合法性。栈的先进后出(FILO)特性非常适合处理相邻重复项的匹配问题。,重复项删除操作会选择两个相邻且相同的字符并删除它们。栈中存储的元素已经是“处理过的无相邻重复项”的子序列。最直观的暴力解法是重复扫描字符串,每次删除相邻重复项,直到没有可删项。栈操作完成后,剩余元素即为删除所有相邻重复项后的结果。显然需要更高效的实现。
2025-03-08 15:01:59
665
原创 LeetCode刷题实战:原地移除数组中指定元素(双指针法详解)
快指针fast:遍历数组的每一个元素,探测符合条件的元素。慢指针slow:指向下一个可覆盖的位置,仅在找到符合条件(即元素值不等于val)时向前移动。删除有序数组中的重复项移动零合并两个有序数组它们的核心逻辑均是通过指针分离“目标数据区”与“待处理区”,减少不必要的元素移动。
2025-03-08 14:20:37
459
原创 C++重新入门-vector容器
在C++中,是一个标准库中的容器,它提供了动态数组的功能,可以存储任意类型的元素,并且能够动态增长。以下是关于容器的详细解释:提供了一个动态大小的数组,可以根据需要动态地增加或减少元素的数量。这使得比C-style数组更加灵活和易于使用。要使用,需要包含头文件 ,并使用命名空间。3.创建和初始化:使用默认构造函数创建空的:使用初始化列表初始化:使用拷贝构造函数:使用范围构造函数:使用重复值初始化:4.访问元素:访问 中的元素可以使用下标操作符
2024-03-03 20:45:19
1163
1
原创 C++重新入门-string容器
/ 查找子串// 返回字符串长度// 比较字符串// 访问指定位置的字符// 替换子串// 插入子串// 删除子串// 提取子串。
2024-02-29 21:24:26
1349
1
原创 C++重新入门-基本输入输出
C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做。
2024-02-13 16:51:36
2362
原创 C++重新入门-指针篇
C++ 中的指针是一种非常重要的数据类型,它们存储了内存地址,可以用来直接访问和操作内存中的数据。指针提供了灵活性和直接性,但也需要谨慎使用,因为误用指针可能导致程序崩溃或安全漏洞。
2024-02-13 16:14:55
449
原创 C++重新入门-字符串
类类型,支持上述所有的操作,另外还增加了其他更多的功能。string类提供了一种更方便、更安全的方式来处理字符串,相比于C风格的字符串处理函数,它具有更多的功能和更强的类型安全性。C 风格字符串使用字符数组存储字符串内容,因此您可以使用指针来访问它们。通常情况下,C 风格字符串与指向其第一个字符的指针相同。这个字符串实际上是一个包含了字符 'H', 'e', 'l', 'l', 'o', '\0' 的字符数组。实际上就是一个指向这个字符数组的指针,也就是指向字符串第一个字符 'H' 的指针。
2024-02-13 15:59:19
439
原创 C++重新入门-数组
当我们谈到C++中的数组时,我们指的是一组相同类型的元素,这些元素按照顺序存储在内存中。数组是一种非常基本的数据结构,用于存储和处理大量相似类型的数据。
2024-02-12 16:57:44
430
原创 C++重新入门-C++ 函数
函数头包括函数的返回类型、函数名、参数列表等信息。// 函数体是函数返回的数据类型,它指定了函数执行后的返回值类型。如果函数不返回任何值,可以使用void。是函数的名称,它用于在程序中唯一标识函数。是函数的参数列表,包括参数的数据类型和名称。如果函数不接受任何参数,则参数列表为空。
2024-02-12 12:50:26
935
原创 C++重新入门-C++判断语句
判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。
2024-02-11 14:16:28
1359
原创 C++重新入门-循环
有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了允许更为复杂的执行路径的多种控制结构。
2024-02-11 13:54:00
1386
原创 C++重新入门-C++运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。
2024-02-10 16:50:23
982
原创 C++重新入门-C++变量作用域
一般来说有三个地方可以定义变量:在函数或一个代码块内部声明的变量,称为局部变量。在函数参数的定义中声明的变量,称为形式参数。在所有函数外部声明的变量,称为全局变量。// 在函数内部声明的局部变量std::cout
2024-02-07 14:43:01
1964
原创 C++重新入门-C++数据类型
使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。您可能需要存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等)的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。
2024-02-05 17:13:45
832
原创 C++重新入门-C++基本语法
注释是用来解释代码的文字,对于程序员而言是非常重要的。在C++中,注释可以使用两种方式:单行注释(//)和多行注释(/* */)。预处理器指令是在编译之前由预处理器处理的命令。例如,#include指令用于包含头文件,#define用于定义宏等。命名空间用于将代码分组在一个逻辑单元内,防止命名冲突。C++中常见的命名空间是std,包含了很多标准库的函数和对象。每个C++程序都需要有一个主函数,即main函数。程序从main函数开始执行。在C++中,你需要声明变量并指定其数据类型。常见的数据类型包括整数 (
2024-02-03 15:42:23
842
原创 C++重新入门-C++简介
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。C++ 被认为是一种语言,它综合了高级语言和低级语言的特点。C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。
2024-02-02 19:18:58
1002
原创 C++重新入门-引用
在C++中,引用是一种用于简化对变量的操作的机制。引用提供了一个,允许程序员使用。引用通常用于函数参数传递、函数返回值和简化代码中的某些操作。
2024-01-24 10:44:27
411
原创 C++重新入门-函数重载
C++函数重载(Function Overloading)是指在同一作用域内,可以定义多个函数,通过函数重载,可以使用相同的函数名来实现不同的操作,提高了代码的可读性和灵活性。重载函数必须具有相同的名称。重载函数的参数列表必须有所区别,包括参数的C++并不要求重载函数的返回类型相同,但除了返回类型之外,其他部分必须有所不同。
2024-01-23 19:54:58
507
原创 CMake良心教程(2)手把手教你入门!
这种方法对于将生成的可执行文件与源代码分开存放非常有用,使项目的结构更加清晰,并且可以更好地组织构建和生成的文件。此外,它还指示 CMake 在构建时将生成的可执行文件放在另一个子目录中(在这个例子中是。命令将告诉 CMake 进入指定的子目录(在这个例子中是。这种分层的方式让你能够更加灵活地组织和管理你的项目。命令时,CMake 会先处理根目录的。目录),并在该目录中寻找和处理。
2023-08-10 11:12:42
262
原创 CMake良心教程(1)手把手教你入门!
用来设置项目的名字和支持的语言,默认支持所有语言第二行代表指定工程名为demo,支持语言是C++最好写上,它会引入两个变量 demo_BINARY_DIR 和 demo_SOURCE_DIR,同时,cmake 自动定义了两个等价的变量 PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR。
2023-08-08 10:11:00
1104
1
原创 【操作系统】CPU调度
在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。短作业优先(SJF)调度算法从后备队列中选择一个或若干估计运行时间最短的作业,将它们调入内存运行:短进程优先(SPF)调度算法从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。当一个进程正在处理机上运行时,即使有某个优先级更高的进程进入就绪队列,仍让正在运行的进程继续运行,直到由于其自身的原因而让出处理机时(任务完成或等待事件),才把处理机分配给就绪队列中优先级最高的进程。
2023-06-21 17:24:23
1605
原创 【操作系统】进程概述
进程是计算机系统中正在运行的程序的实例。它是操作系统对程序执行的基本单位,可以看作是程序在执行过程中的动态表现。每个进程都有自己的内存空间、代码、数据和执行状态。多个进程可以同时运行在计算机系统中。1)进程是程序的一次执行过程。2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。3)进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。引入进程实体的概念后,我们可以把。
2023-06-20 16:33:26
3879
原创 【操作系统】程序运行环境
中断(Interruption)也称外中断,是指来自CPU 行指外部的事件,通常用于信息输入/输出,如设备发出的 I/O 结束中断,表示设备输入/输出处理已经完成。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。异常(Exception)也称内中断,是指来自CPU执行指令内部的事件,如程序的非法操作码、地址越界、运算溢出、虚存系统的缺页及专门的陷入指令等引起的事件。异常不能被屏蔽,一旦出现,就应立即处理。
2023-06-19 18:17:26
638
原创 操作系统的基本概念
用户应用程序操作系统硬件硬件如中央处理器、内存、输入/输出设备等,提供基本的计算资源。应用程序如字处理程序电子制表软件、编译器、网络浏览器等,规定按何种方式使用这些资源来解决用户的计算问题。操作系统控制和协调各用户的应用程序对硬件的分配与使用。在计算机系统的运行过程中,操作系统提供了正确使用这些资源的方法。综上所述,操作系统(Operating System,OS)
2023-06-19 10:58:35
275
原创 一文搞懂文件系统
文件系统是计算机操作系统中的一个核心组件,用于管理计算机中的文件和文件夹。它提供了一种组织和访问计算机存储设备上数据的方式。文件系统使用户能够创建、修改、删除和查找文件,以及组织文件和文件夹的层次结构。
2023-06-18 15:47:36
3998
原创 磁盘详解(一文搞懂磁盘)
这种等待在现代驱动器中经常发生,并且是 I/O 服务时间的重要组成部分,又称之为旋转延迟(rotational delay/rotation delay)。不像任务调度程序,磁盘调度程度对于每一个任务的长度是未知的,它只能靠好的猜测。磁头的位置、任务请求的位置,比任务的长度更重要。由于I/O的高开销,操作系统在决定哪个I/O与磁盘交互扮演一个重要角色。磁头当前所在的位置在外围的21扇区,如果要访问12,必须先将磁头移到其所在的位置,即寻道(seek)。:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。
2023-06-13 21:40:43
5262
2
原创 I/O设备详解
I/O设备的电子部件通常是一块插入主板扩充槽的印刷电路板。CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。这个电子部件就是I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件。主要功能:控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。
2023-06-12 21:57:20
4458
1
原创 一文搞懂操作系统页面置换算法
首次的3个引用(7,0,1)会引起缺页错误,并被调到这些空帧。因为这个置换,下一个对0的引用将有缺页错误,然后页面1被页面0置换。在内存中找到一些页面,但没有真正使用,将其中的页面拿出。按最佳置换的规则, 往后寻找,最后一个出现的页号就是要淘汰的页面。操作系统确定所需页面的在辅助存储上的位置,但是却发现空闲帧列表上没有空闲帧,所有内存都在使用。然后访问7,首先看内存块没有7,然后开始选择替换的页面,指针经过的内存块把访问位设置为0。过程:第一轮扫描,找(0,0)不改变访问位,所以找到了(0,0)然后置换。
2023-06-08 16:50:16
3174
2
原创 一文搞懂操作系统虚拟内存管理
早期的计算机系统中,主存容量很小,虽然主存中仅存放一道用户程序,但是存储空间放不下用户进程的现象也经常发生。比如 IBM 推出的第一台PC机最大只支持 1MB 大小的内存。因此经常会出现内存大小不够的情况。后来人们引入了覆盖技术,用来解决“程序大小超过物理内存总和”的问题。2.2覆盖技术基本思想其基本思想:由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可以把用户空间分成一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,调入后就不再调出。
2023-06-06 17:35:35
2587
1
原创 操作系统-内存空间的分配与回收(连续分配管理,非连续分配管理)
20世纪60年代出现了支持多道程序的系统,为了能在内存中装入多道程序,且这些程序之间又不会相互干扰,于是将整个用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业,这样就形成了最早的、最简单的一种可运行多道程序的内存管理方式。固定分区是在系统生成时进行内存分区的一种方法。分区可以是固定的,也可以是可变的,但一旦确定,就不能更改。如果需要更改分区大小,则必须使用修改后的分区再次生成操作系统。所以本质上是静态的。分区大小相等。用于利用一台计算机去控制多个相同对象的场合,缺乏灵活性。
2023-06-03 21:04:38
1950
原创 一文讲透实体-联系模型(E-R图)
E-R模型(Entity-Relationship Model)是一种用于数据库设计的概念模型。它提供了一种描述现实世界中数据组织和关联的图形化方法,用于表示实体属性和联系之间的关系。
2023-05-31 21:29:31
59943
2
原创 一文搞懂操作系统中银行家算法
在安全序列中,每个进程按照其所需资源的顺序依次执行,并在执行完毕后释放所占用的资源,这样其他进程才能获取到所需的资源。总结来说,不安全状态指的是系统无法找到一种执行顺序,使得每个进程都能在其所需资源得到满足时执行,并在执行完毕后释放资源,可能导致死锁的发生。总结来说,安全序列是指满足系统安全性要求的进程执行顺序,其中每个进程都能在其所需资源得到满足时执行,并在执行完毕后释放资源,而不会发生死锁。安全序列的存在意味着系统中的资源分配是合理的,并且可以满足所有进程的需求,从而确保系统的可靠性和稳定性。
2023-05-25 20:57:27
8479
2
原创 一文讲透操作系统中的死锁
死锁是指在并发计算或多线程编程中,两个或多个进程(或线程)被永久地阻塞,因为每个进程正在等待其他进程所持有的资源,而这些资源又只能由其他进程释放。简单来说,死锁是一种进程无法继续执行的状态,因为它无法获取所需的资源,同时又无法释放已经占有的资源。假设有两个进程(进程A和进程B)以及两个资源(资源X和资源Y):进程A获取资源X。进程A尝试获取资源Y。进程B获取资源Y。进程B尝试获取资源X。如果进程A先获取资源X,然后进程B获取资源Y,接着两个进程分别等待对方释放资源,就会导致死锁。
2023-05-23 18:56:58
331
原创 一文搞懂操作系统中的管程
"管程是一种机制,用于强制并发线程对一组共享变量的互斥访问(或等效操作)。此外,管程还提供了等待线程满足特定条件的机制,并通知其他线程该条件已满足的方法。这个定义描述了管程的两个主要功能:互斥访问:管程确保多个线程对共享变量的访问互斥,即同一时间只有一个线程可以访问共享资源,以避免竞态条件和数据不一致性问题。条件等待和通知:管程提供了等待线程满足特定条件的机制,线程可以通过条件变量等待某个条件满足后再继续执行,或者通过条件变量通知其他线程某个条件已经满足。
2023-05-21 20:46:00
12059
4
原创 MySQL索引篇(一文讲透索引!)
(Index)是一种数据结构,用于快速查找数据库表中的数据。它类似于书籍的目录,可以帮助数据库系统更高效地定位和访问存储在表中的数据。索引通过创建一个特定的数据结构,以一种有序的方式存储表中的列值和对应的物理存储位置。这样,在执行查询时,MySQL可以首先检查索引,找到符合查询条件的数据行,然后直接跳转到这些行所在的位置,而不需要逐行扫描整个表。这种方式可以极大地提高查询性能和响应时间。
2023-05-19 18:31:40
883
1
原创 C语言一文搞懂柔性数组
int length;int data[];// 柔性数组在这个例子中,结构体包含一个整数变量length和一个柔性数组data。数组的长度未指定,只有一个空的方括号[],它表示这是一个柔性数组。柔性数组必须是结构体的最后一个成员。注意:柔性数组是C99标准中引入的特性,在更早的C标准中可能不支持。
2023-05-17 23:35:44
329
空空如也
c语言一个数组和函数的综合实验,希望大家解决分析一下
2021-11-17
c语言的一个有趣的问题
2021-11-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人