- 博客(74)
- 资源 (1)
- 收藏
- 关注
原创 华为 2025 软件精英挑战赛过程、代码与心得
由于自己的时间问题,只有不到一周的时间可以写这个代码,最终结果在小测试上拿到了 80%+ 的分,但是在大测试数据上会报错,可能是内存没有优化的问题,也可能是分离空闲链表的合并、删除部分有漏洞,但是已经没有时间改了。虽然没拿到什么成果,但是也是读研后又一次写稍微复杂一点的 C++ 代码,用到了一些诸如 Lambda 表达式的之前自己没有用过的特性,也算锻炼了一点代码能力吧。代码放到了。
2025-03-30 18:29:37
1136
2
转载 【转载】Obsidian数学公式拥挤看不清的解决方法
目录,添加需要的 css 样式,然后在设置 -> 外观 -> 启用 CSS 代码片段即可。避免以后遇到类似问题,记录一下解决方法。
2025-03-18 22:37:31
109
原创 CSAPP的MallocLab
这个是做MallocLab的记录。实验内容是做一个动态内存分配器。首先实现书上介绍最详细的带边界标记的。其中头部和脚部的块大小都是整个结构的大小(包含头部尾部),a/f(allocated/free)即=0时表示该块空闲,=1时表示该块已分配。填充可能是分配器策略的一部分,用来对付外部碎片。也可能是用来满足对齐要求的。在整个堆中,起始第一个字作为填充。其后两个字(8字节)作为,分别作为一个头部和一个脚部,并且永不释放。其后跟着的就是分配的普通块。最后堆以一个。
2025-02-26 20:52:44
727
原创 力扣47. 全排列 II
用 used 保存在一次答案中取过的数组索引。先对数组进行排序,然后尝试取每个元素作为排列。换句话说,如果取到了当前元素,但它前面的元素没取过,就说明现在是没按顺序取的。在这俩相等的情况下(因为如果不等前面就判断可取了),之前一定按顺序取过一次,所以一定重复了。对于最后一种难懂的情况,例如(记第二个1为1’),顺序时按照1, 1', 2的顺序取过一次答案了,因此在以 1’ 作为第一个元素时,就不能再取一次1', 1, 2作为答案了(此时。
2025-02-25 14:48:42
193
原创 管理服务器遇到的一些问题(开机进入Grub、版本升级、扩容等)
2024 年 12 月 3 日,服务器由于误操作被删了一些数据,重新整理服务器的时候遇到了一些问题,记录下来。
2024-12-04 21:55:44
1338
原创 2024 TIP 论文 robust-ref-seg 复现过程
本篇是 2024 年 TIP 论文 Towards Robust Referring Image Segmentation 的复现过程。
2024-11-26 17:11:42
1064
2
原创 利用学生认证部署 copilot-gpt4-service 白嫖 gpt-4.0
过年期间在公众号 HelloGitHub 上看到了一个项目,可以将 GitHub Copilot 转成 ChatGPT 的服务。这么一个转换的好处是, GitHub 可以通过学生认证免费试用,转换成 ChatGPT 后就可以了。下面记录一下本地部署自己的 copilot-gpt4-service 服务过程。
2024-02-27 22:50:31
5008
3
原创 银行家算法 C语言实现
关于银行家算法就不赘述了,首先是结果截图:下面是代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define TRUE 1#define FALSE 0int N_resource, N_process; // 资源数和进程数// 银行家算法用到的数据结构int *Avaliable = NULL;int **Max = NULL;int **Allocation = NU
2022-05-18 16:08:39
5209
2
原创 读者-写者问题
这是这学期操作系统课的第一次实验:分别实现读者优先和写者优先的读者写者问题。这次的实验都基于Ubuntu系统通过C语言实现。本实验参考了这篇文章。读者优先和写者优先的唯一区别是:其他读者正在读,且有写者等待时,新读者到来后(1)读者优先:可读(2)写者优先:等待下面是代码:#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <semaphore.h>#incl
2022-05-18 15:57:55
745
2
原创 《深度探索C++对象模型》笔记
这是第一遍看《深度探索C++对象模型》的简单笔记。整本书有些地方看着很通透,但有些地方看得迷迷糊糊不知所云。等以后重看时把一些不懂的地方再完善完善。C++实现多态的方法隐式转化如Base *p = new Derived();虚函数机制dynamic_cast和typeidC++的内存模型分为5个区域:堆动态分配的内存。栈存储局部变量、局部常量、参数等。静态存储区存储全局和静态变量。在C中,未初始化的全局变量会放到.bss区域;而C++将所有全局变量都放到静态存储区中
2022-04-08 21:05:15
1142
原创 剑指Offer 26.树的子结构
题目地址我的思路是判断当前结点是否匹配,若匹配则返回true,否则继续判断它的两个子树。判断匹配的过程是这样的:当前结点值不相等则返回false,否则继续。判断当前结点的两个子树。代码如下:private: bool judge(TreeNode* A, TreeNode* B) { // 不论是isSubStructure还是judge的递归调用都保证了B不会是nullptr // 因此当A为空时一定是不匹配的 if (A == nu
2022-04-08 20:37:00
225
原创 剑指Offer 22.链表中倒数第k个节点
题目地址快慢指针将慢指针指向头结点,快指针指向其之后k个节点,使得二者之间距离为k。将它们一起向后移动,直到快指针指向nullptr,此时慢指针就指向倒数第k个结点。ListNode* getKthFromEnd(ListNode* head, int k) { if (head == nullptr) return head; ListNode *fast = head->next; ListNode *slow = h
2022-04-08 17:26:03
1187
原创 剑指Offer 07.重建二叉树
重建二叉树题目思路前序遍历的顺序是[(根结点), (左子树前序遍历), (右子树前序遍历)]中序遍历的顺序是[(左子树中序遍历), (根结点), (右子树中序遍历)]采用递归的思想。既然前序遍历是从根结点开始,那么就根据前序遍历数组的第一个结点记为root,在中序遍历中找到root。然后删除前序遍历数组中的根结点。以新的前序遍历数组和中序遍历数组中root左侧部分为输入,构造root的左子树。再以新的前序遍历数组(注意此时前序遍历数组的首结点在上面的递归中删除了一个)和中序遍历数组中root右侧
2022-03-30 22:14:46
829
原创 一些排序算法
看算法第四版整理的关于排序算法的部分。文章目录选择排序思路评估插入排序思路评估希尔排序思路评估归并排序思路评估快速排序思路评估堆排序二叉堆思路评估总结下面的排序思路都默认做升序排序选择排序思路找到数组中最小的元素,将其和数组首元素交换位置。再找到剩下元素中最小的元素,将其和数组第二个元素交换位置,如此往复。评估选择排序需要大概N2/2N^2 / 2N2/2次比较,和NNN次交换。优点数据移动最少,交换次数和数组的大小是线性关系。缺点无论输入如何排序时间不会减少。插入排序思路维
2022-03-30 17:18:38
1195
原创 CSAPP的CacheLab
这个是做CacheLab的记录,part A的内容是做一个和csim-ref一样功能的cache模拟器,使用LRU替换策略。有一说一第一次看到这个lab的时候还是吓一跳的,因为题目说是修改csim.c文件即可,我一开始以为是文件里框架什么的都给好了只需要适当填空就行,没想到打开后发现只有一句printSummary()函数。不过其实慢慢做下来发现也没有想象中复杂,最近寒假每天抽出来四五个小时,三天就写完了part A。但是part B的blocking技术那块现在理解的还不是很好,而且也不知道如何处理
2022-02-06 22:43:53
834
原创 CSAPP的AttackLab
AttackLab的实验记录。ctarget有3个使用代码注入(code-injection)的实验。rtarget有2个使用面向返回编程(return-oriented-programming)的实验。代码注入很简单,就是把自己的指令代码写到缓冲区,然后修改返回地址为注入代码的地址即可,但通常会因为栈随机化和标记可执行代码段而失效。ROP简单来说就是在已有程序中拼凑出自己需要的指令。通过缓冲区溢出输入不同的指令地址,再通过不断地ret来执行不同片段的指令(叫做gadget)。文章目录phas
2022-01-09 15:01:26
809
原创 CSAPP的BombLab
这篇文章记录一下做bomb实验的过程。这几天封宿舍,每天除了做核酸之外就不能出去。每天拆一个炸弹,算上彩蛋刚好用时一周。首先使用objdump -d bomb > bomb.txt得到反汇编代码。查看bomb.c文件看到有phase_1到phase_6 6个输入函数,对应6个炸弹。下面从第一个开始拆除。文章目录phase_1phase_2phase_3phase_4phase_5phase_6secret_phasephase_1phase_1中调用了strings_not_equal,后者
2022-01-04 13:19:32
1040
原创 CSAPP实验一DataLab
CSAPP里的实验环境Linux+gcc,首先在虚拟机里安装了Ubuntu,然后分别执行这些命令:apt-get update 更新apt软件源sudo apt-get install build-essential 安装C/C++编译环境sudo apt-get install gcc-multilib 补充gcc完整环境sudo apt-get install gdb 安装gdb实验环境就搭建好了。下面是关于第一次实验DataLab的笔记。bitxor 实现按
2021-12-22 16:20:07
956
原创 VS下载插件很慢的一种解决方法
今天用VS下AsmDude的时候发现VS下载插件特别慢,刚好前两天验证office的时候也遇到微软账号登录很慢的情况,这两种情况都可以通过下面的方式解决问题:设置→网络和Internet→以太网→更改适配器选项→打开当前连接的网络的属性取消勾选IPv6→双击IPv4→将自动获得DNS服务器地址改为手动设置,并将其设置为4.2.2.1。这是微软的DNS服务器。...
2021-11-02 15:32:21
3881
8
原创 《计算机网络自顶向下方法》笔记
1~6章是基础,之后7,8章可以看看,第9章就不看了。PS.这本书举例挺多而且易于理解。2.2.5基础通信链路和分组交换机通信链路和分组交换机把端系统连接在一起。通信链路包括同轴电缆、铜线、光纤和无线电谱,它们的传输速率不同。当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节。由此形成的信息包称作分组。分组交换机从它的一条入通信链路接收到达的分组,并从它的一条出通信链路转发该分组。分组交换机包括路由器(router)和链路层交换机(link-layer swi
2021-09-26 10:36:40
1917
2
原创 MFC判断edit是否是不可写状态
在用MFC写实验的时候想要动态地切换edit编辑框的不可写状态。以前都是直接在控件的属性上设置,但不能满足在代码中动态切换的目的。在网上查到可以使用((CEdit*)GetDlgItem(EDIT_ID))->SetReadOnly(TRUE)这样的语句来使用代码动态设置其可写状态,但是根据情况的不同,有时需要可写,有时需要不可写,这里只是用代码设置其状态,但是该怎么判断其状态呢?在网上找了很久很多没有找到,最后还是在MFC的官方文档中找到说可以通过CWnd::GetStyle的返回值中的ES_R
2021-09-19 12:20:45
1569
原创 动态连通性问题:union-find算法
问题描述是这样的:输入一列整数对,每个整数对(p,q)表示p和q是相连的,每个点称作触点,每个相连的触点的集合称作连通分量。输出所有不能相连的整数对(即连通分量)的数量通过union-find算法解决该问题。其API如下:方法描述UF(int N)初始化N个触点void union(int p, int q)连接p和qint find(int p)p所在连通分量的标识符boolean connected(int p, int q)如果p和q在同一个连通分
2021-09-06 20:25:57
186
原创 算法第四版练习题:热还是冷
题目描述是要猜出1~N之间的一个秘密整数。每次猜测之后,如果相等则游戏结束,否则会得知和上一次猜测相比是更加接近(热)还是远离(冷)。我的思路是利用二分的思想,将秘密数的区间范围从1~N逐渐缩小直到找到。记录下代码:/*热还是冷?随机生成一个1~N的整数:秘密数,猜测它,如果猜对则结束相较于上一次猜测,更接近或不变时为热,否则为冷 */import edu.princeton.cs.algs4.*;import java.lang.Math;class HotColdGame {
2021-09-06 16:21:49
158
原创 力扣28.实现strStr
实现strStr题目这道题就是实现一个字符串匹配算法,以前学到过BF和KMP算法,先实现这两个算法。以后有时间学了其他算法再来实现其他的。BF算法最先想到的当然是暴力求解。但是第一次写成的代码相比BF虽然时间复杂度是一样的,但是冗长了不少- -!改进一下就是BF算法:class Solution {public: int strStr(string haystack, string needle) { if (needle == "") return
2021-08-19 11:41:55
214
原创 力扣151.翻转字符串里的单词
翻转字符串里的单词题目使用额外空间的方法最先想到的方法是遍历字符串,将最终结果储存到结果字符串中。因为每个单词的顺序都要翻转,所以从字符串的末尾开始向前遍历。由于是逆序遍历,为了保持每个单词不被改变,使用栈存储每个单词的字母,再输出后就可以恢复正常顺序。对于冗余的空格,在遇到时只需将其出栈即可。class Solution {public: string reverseWords(string s) { stack<char> word_stack; //
2021-08-16 15:18:05
256
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人