- 博客(49)
- 收藏
- 关注
原创 第三章 内存管理
内存管理是计算机系统中关键的基础技术,它直接影响程序的性能、稳定性与安全性。在C++等底层语言中,内存管理主要包括动态分配与释放、栈与堆的使用以及内存泄漏和悬挂指针的防范。合理的内存管理可以提高程序运行效率,避免系统资源浪费,而不当的管理则可能导致崩溃或安全漏洞。现代编程中,智能指针(如std::unique_ptr和std::shared_ptr)提供了自动化内存管理机制,有效减少了手动释放内存的风险。同时,操作系统层面的内存管理,如分页、虚拟内存和垃圾回收,也为程序提供了安全可靠的运行环境。
2025-09-04 09:24:40
832
原创 第二章 进程与线程
进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位。一个进程可以包含多个线程,进程间相互独立,线程共享同一进程的资源。进程拥有独立的地址空间、代码段、数据段和堆栈,创建和切换开销较大;线程依附于进程存在,拥有独立的寄存器和栈,但共享代码段、数据段和堆,创建与切换开销较小。多进程适用于需要强隔离性和稳定性的场景,如服务器多进程模型;多线程则常用于需要高并发和共享数据的场景,如客户端应用和高性能计算。进程与线程的合理使用可提高系统的并发性与资源利用率,但需注意同步与通信问题,避免死锁与竞争。、
2025-08-26 17:03:30
1056
原创 第一章 操作系统概述
操作系统(Operating System, OS)是管理计算机硬件与软件资源的系统软件,是用户与计算机硬件之间的桥梁。它的主要任务是为用户和应用程序提供方便、高效、安全的运行环境。操作系统具有并发性、共享性、虚拟性和异步性等特征,核心功能包括进程管理、存储管理、文件管理和设备管理。用户通过应用程序接口(API)或系统调用使用操作系统的服务,从而完成文件读写、进程创建、内存分配、设备控制等操作。常见的操作系统有 Windows、Linux、macOS、Android 和 iOS,它们广泛应用于个人电脑、服务
2025-08-13 16:05:50
1104
原创 《黑马笔记》 --- C++核心编程
本文介绍了C++中的内存管理模型和引用机制。主要内容包括: 内存分区模型 代码区:存放代码,由OS管理 全局区:存放全局变量、静态变量和常量 栈区:存放局部变量,由编译器管理 堆区:程序员手动管理的内存,使用new/delete操作 引用机制 引用是变量的别名,本质是指针常量 引用必须初始化且不可更改 引用可作为函数参数和返回值,提高代码可读性 注意不要返回局部变量的引用 函数相关 默认参数的使用规则 函数重载的条件:同一作用域、同名、参数不同 这些内容是C++编程中内存管理和参数传递的重要基础。
2025-07-15 18:39:04
546
原创 动态规划 ------ 背包问题
背包问题是动态规划中非常典型的一些题,本篇文章记录总结一下在学习过程中所遇到的一些背包问题。其实主要就是3种,01,完全,多重背包问题,这三种详细一些,认真搞懂了,剩下的就是这三种的变种了,换汤不换药?
2024-05-05 22:37:54
1771
原创 AcWing算法基础课笔记 ------ 第五章 动态规划
本篇文章是在Acwing种学习动态规划的笔记题解,其中的不是很理解,就没有往上写。
2024-05-04 22:31:23
1422
2
原创 第14届蓝桥杯省赛 ---- C/C++ C组
第14届蓝桥杯省赛真题,关于数论的题目不是很会,又没理解的很清楚,所以有两道的题解没有发出来。这两道题:互为和。
2024-03-31 08:37:55
3454
6
原创 AcWing算法基础课笔记 ------ 第三章 搜索与图论
本篇博客记录AcWing算法基础课中的一些有关图论的算法,从熟知的dfs和bfs算法,再到求解单源路径,还有多源路径,最小生成树,以及二分图。
2024-02-28 22:07:09
1349
原创 AcWing算法基础课笔记 ------ 第二章 数据结构
本篇记录一下AcWing上第二章的笔记,这一章收获也很多,学会了用数组去模拟链表,复习了一遍KMP,求表达式,以及新的一些数据结构,字典树,并查集,还有更为高效的哈希表。
2024-02-25 18:51:42
1445
原创 AcWing算法基础课笔记 ------ 第一章 基础算法
本篇博客记录一下AcWing算法基础课第一章节的笔记,以及自己犯的一些错误。这一章节总体来说,收获还是不少的,清晰的认识了二分的模板,以及高精度的加减乘除,前缀和为什么0号位置不放,选择从1的位置开始算起,自己在使用qsort排序时候的错误等等。。
2024-02-23 15:03:20
1244
原创 中等题 ------ 链表
然后再第二次遍历的时候,同样也用前缀和去遍历,如果发现当前节点的前缀和与哈希表中的前缀和不一致,那么他们中间的节点和就是0.题目要求我们将链表进行分割,把所有小于x的放在链表左侧,大于或者等于x的放到链表右侧,从测试用例可以看出,不需要有序也行。这道题通俗易懂的来说就是要我们统计出一个链表中,连续节点的区间个数,这个区间里的每个数都必须是nums中的。在遍历第一遍的时候,将前缀和与相对的节点存到哈希表中去,如果前缀和多次出现,只存它最后一次出现的位置。当你也可以,转数组,qsort,转链表。
2024-02-04 13:29:26
1020
原创 C语言实现跳表(附源码)
跳表与红黑树,AVL树等,都是一种有序集合,那既然是有序集合,其目的肯定是去奔着提升查找效率而去实现的。3int val;//值//当前节点的最大层数//下一个节点的指针数组。}SkipNode;//节点个数int level;//跳表的索引总层数}SkipList;以上是跳表的结构定义,其中那个Node中maxLevel就是当前这个节点的层数,因为每个节点的层数是不一样的嘛,这个用途呢在后面的删除节点中会用到。
2024-02-02 16:55:27
2209
原创 中等题 ------ 数组以及字符串
以前刷的都是一些简单题,从一些基本的数据结构到算法,得有400多道了,简单题就先这样吧,从今天以后就开始着手中等题和困难题了。做了一些中等题,感觉确实和简单题没法比,简单题有些直接模拟,暴力就能做出来,而这些中等题是根本想不到该怎么做,但看了题解,找到公式关系,规律也就觉得还行,慢慢加油吧。本篇是一些关于数组和字符串的题。和的简单题在这。
2024-01-28 21:24:03
1176
原创 刷题 ----- 动态规划
下面就是leetcode上所有关于动态规划的简单题了,有好多是重复的,也就没写。设计出转移状态方程,以及初始化的值,是用动态规划解题的关键。
2024-01-23 16:31:10
1064
原创 刷题 ------ 排序
基于上篇的排序算法,本篇刷了一下leetcode上的关于排序算法的题,因为我是点的排序标签刷的,所以有些题排完序答案就出来了,就没有写题解了。
2024-01-21 14:12:25
1279
原创 刷题 ------ 二分枚举(查找)
文章目录1.x 的平方根2.第一个错误的版本3.有效的完全平方数4.猜数字大小5.排列硬币6. 寻找比目标字母大的最小字母7. 二分查找8.检查整数以及其两倍数是否存在9. 两个数组间的距离值10.特殊的数组的特征值11.找出数组排序后的目标下标12.和有限的最长子序列13.正整数和负数的最大计数14.最小公共值15.统计和小于目标的下标对数目16.LCP.早餐组合16.LCP.采购方案17.LCR.两数之和 || - 输入有序数组18. LCR 搜索插入位置19.LCR 山脉素组的峰顶索引19.寻找旋转排
2024-01-15 22:12:38
1496
1
原创 刷题 ------ 模拟
模拟也能叫暴力,我是这样理解的,一个问题,首先想到的那个方法(把所有的可能性全部一一遍历出来)。就比如字符串匹配算法,模拟(暴力)可以使用双for直接做出。但是这种效率肯定没有KMP匹配算法高。我在前面刷数组,链表,字符串等等中,其实还是用了很多暴力的方法来做的。所以此篇我全是用的模拟暴力的求解办法,有些优质的办法也没写出来。
2024-01-11 21:05:28
1075
原创 刷题 ------ 矩阵
最后开始做的时候,没看清楚题,我以为他是动态的,就是走一步,然后在矩阵中的全部9空格的数据全部改成平均值,所以在外面封装了一个函数,到最后发现只改一个,也就没改了,这道题完全可以在主函数中实现。这道题,首先得知道要是9宫格,那么你遍历矩阵的时候,就不能还是老老实实的从第一行第一个元素开始遍历了,看下图,自身元素能产生就9宫格的,只能从第二行第二列开始遍历,结尾也得注意。这道题我在刚做的时候是开辟了matrix 的大小,我以为幸运数最多每行一个,结果后续看题解,幸运数只有一个,有修改了修改,提高了点时间。
2024-01-03 17:46:53
1334
原创 刷题 ------ 深度(DFS)与广度(BFS)优先搜索
其实在上一边博客中 ----- 二叉树刷题,就能感觉到,对二叉树的遍历操作:前中后序遍历是DFS层序遍历则是BFS。
2023-12-28 17:29:22
1242
原创 刷题 ------ 二叉树
这道题主要是考察,直径在这里的概念是啥,先观察上图,这一看就能看出来,最左边的孩子到最右边的孩子一定是那个最长的,想都不用想,没有什么比从一左边拐到右边长了,最左边的孩子的路径是2,最右边的是1.所以直径是 2+1 = 3.我们同样还是运用递归的方式去实现,做了这几道题,也能感觉出来点啥,这几种方式,其实跟在学习数据结构图的遍历的时候,那里有一个深度优先算法,就是一条路走到黑的那种,其实还是很类似的。要注意的是,得使用二级指针,因为你要修改指针的值嘛,当然你也可以拿一个变量去记录值,这都是无所谓的。
2023-12-24 16:12:53
324
原创 刷题 ------ 哈希表
这种方式其实在平时刷一些题的时候,直接就可以在函数中实现,去使用,建立一个数组就好了,但是缺点就是浪费的空间太大了。就是把‘\0’传入那个查找函数中去,又因为哈希表中 0 - ‘a’ 成负的了,肯定是错的,然后我改成这样。这道题,它说恰有一个元素重复了n次,就意思是,只有个元素是重复的。这样暴力太费时了,有时候你的网速不是很好,这个还过不了,所以用哈希表来做还是相当不错的。这道题,可以直接用暴力求法,一个一个的去枚举,就能成功,但是时间太慢了。这个交换一次有说法的,不能不交换,也不能交换2次,这点很重要。
2023-12-17 16:34:57
335
1
原创 刷题 ------ 栈
他这道题就是让咱实现一个队列,题目中说两个书车,既然又出现在栈里面,那应该是让咱用两个栈实现一个队列,就像前面的那一道题一样,这里我就直接实现一个队列过了的。这道题是构造栈,它这个最小栈的意思就是可以用O(1)的方式去直接找到栈中最小的,如果直接遍历得出结果,还叫什么最小栈。上面就是leetcode上所有关于栈的简单题了,有好几个重复的,就没往上放,还有些二叉树的题,也没有放。下面是代码,栈在这里的代码也没有放出来,思路就是这么一个思路,自己动手实现一下栈还是可以的。我这里就不放出来了,我用的是循环队列。
2023-12-08 20:25:28
324
原创 KMP匹配算法
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n) [1]。----- 来自百度KMP算法区别于暴力求解法,时间上有了很大的优化。只需要对主字符串进行一次遍历就好。
2023-12-06 08:52:16
194
1
原创 刷题 ------ 字符串
既然是找最后一个单词,那么直接求出字符串的长度,然后从后往前找即可int i;i >= 0;i--)//如果找到了空格,并且在此之前还找到了字母就意味着这个单词结束了= 0)break;//如果不等于空格长度增加if(s[i]!return ans;
2023-12-05 12:18:28
380
1
原创 数据结构图 ------最小生成树
我个人感觉,Prim算法虽然写起来多,但是好理解,比这个Kruskal的parent判断回路好理解。而Kruskal算法核心就是这个判断回路🤣🤣🤣。Prim和Kruskal算法源码。
2023-11-03 20:21:25
215
空空如也
如何在第二十个测试用例会出错下面是代码?
2024-01-03
我就拿到VS编译器上尝试调试一下,结果发现是逆转字符串有错(相关搜索:逆序字符串)
2023-11-29
leetcode杨辉三角
2023-11-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅