自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 资源 (1)
  • 收藏
  • 关注

原创 YOLO系列简记

主要简单记录下YOLOv1~YOLOv4

2024-04-14 13:04:01 819

原创 利用学生认证部署 copilot-gpt4-service 白嫖 gpt-4.0

过年期间在公众号 HelloGitHub 上看到了一个项目,可以将 GitHub Copilot 转成 ChatGPT 的服务。这么一个转换的好处是, GitHub 可以通过学生认证免费试用,转换成 ChatGPT 后就可以了。下面记录一下本地部署自己的 copilot-gpt4-service 服务过程。

2024-02-27 22:50:31 2423 2

原创 GNU make笔记

看《跟我一起写makefile》做的笔记

2023-11-03 11:47:46 305

原创 优先级反转,优先级继承和优先级天花板协议

简单介绍了优先级反转的情况,以及优先级继承和原始优先级天花板协议这两种解决方案。

2023-10-27 15:32:26 526 6

原创 分区操作系统

简单介绍了下分区操作系统的概念及其机制。

2023-10-24 19:34:01 420

原创 effective c++ 笔记

看effective c++做的简易笔记

2023-08-29 11:08:31 372

原创 我的大学方法论

一个大学的经验贴

2023-07-13 22:04:10 268

原创 一点命令行笔记

看《linux命令行大全》做的一点笔记。

2023-07-04 17:25:22 267

原创 深度学习基础笔记

大概看了一点,简单整理一些概念。

2023-07-04 17:23:33 479

原创 查找树(BST到2-3树再到红黑树)

简单记录二叉查找树、和红黑树的思路和代码,以及从BST到红黑树过渡的2-3树。

2023-04-01 23:38:25 325

原创 力扣19. 删除链表的倒数第 N 个结点

力扣19. 删除链表的倒数第 N 个结点,C++的递归方法

2023-02-02 15:36:46 86

原创 力扣24. 两两交换链表中的节点

力扣24. 两两交换链表中的节点

2023-02-02 14:59:04 309

原创 力扣844. 比较含退格的字符串

力扣844. 比较含退格的字符串题解

2023-01-30 18:58:41 138

原创 银行家算法 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 4557

原创 读者-写者问题

这是这学期操作系统课的第一次实验:分别实现读者优先和写者优先的读者写者问题。这次的实验都基于Ubuntu系统通过C语言实现。本实验参考了这篇文章。读者优先和写者优先的唯一区别是:其他读者正在读,且有写者等待时,新读者到来后(1)读者优先:可读(2)写者优先:等待下面是代码:#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <semaphore.h>#incl

2022-05-18 15:57:55 564 2

原创 《深度探索C++对象模型》笔记

这是第一遍看《深度探索C++对象模型》的简单笔记。整本书有些地方看着很通透,但有些地方看得迷迷糊糊不知所云。等以后重看时把一些不懂的地方再完善完善。C++实现多态的方法隐式转化如Base *p = new Derived();虚函数机制dynamic_cast和typeidC++的内存模型分为5个区域:堆动态分配的内存。栈存储局部变量、局部常量、参数等。静态存储区存储全局和静态变量。在C中,未初始化的全局变量会放到.bss区域;而C++将所有全局变量都放到静态存储区中

2022-04-08 21:05:15 980

原创 剑指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 162

原创 剑指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 1118

原创 剑指Offer 07.重建二叉树

重建二叉树题目思路前序遍历的顺序是[(根结点), (左子树前序遍历), (右子树前序遍历)]中序遍历的顺序是[(左子树中序遍历), (根结点), (右子树中序遍历)]采用递归的思想。既然前序遍历是从根结点开始,那么就根据前序遍历数组的第一个结点记为root,在中序遍历中找到root。然后删除前序遍历数组中的根结点。以新的前序遍历数组和中序遍历数组中root左侧部分为输入,构造root的左子树。再以新的前序遍历数组(注意此时前序遍历数组的首结点在上面的递归中删除了一个)和中序遍历数组中root右侧

2022-03-30 22:14:46 765

原创 一些排序算法

看算法第四版整理的关于排序算法的部分。文章目录选择排序思路评估插入排序思路评估希尔排序思路评估归并排序思路评估快速排序思路评估堆排序二叉堆思路评估总结下面的排序思路都默认做升序排序选择排序思路找到数组中最小的元素,将其和数组首元素交换位置。再找到剩下元素中最小的元素,将其和数组第二个元素交换位置,如此往复。评估选择排序需要大概N2/2N^2 / 2N2/2次比较,和NNN次交换。优点数据移动最少,交换次数和数组的大小是线性关系。缺点无论输入如何排序时间不会减少。插入排序思路维

2022-03-30 17:18:38 982

原创 CSAPP的CacheLab

这个是做CacheLab的记录,part A的内容是做一个和csim-ref一样功能的cache模拟器,使用LRU替换策略。有一说一第一次看到这个lab的时候还是吓一跳的,因为题目说是修改csim.c文件即可,我一开始以为是文件里框架什么的都给好了只需要适当填空就行,没想到打开后发现只有一句printSummary()函数。不过其实慢慢做下来发现也没有想象中复杂,最近寒假每天抽出来四五个小时,三天就写完了part A。但是part B的blocking技术那块现在理解的还不是很好,而且也不知道如何处理

2022-02-06 22:43:53 693

原创 CSAPP的AttackLab

AttackLab的实验记录。ctarget有3个使用代码注入(code-injection)的实验。rtarget有2个使用面向返回编程(return-oriented-programming)的实验。代码注入很简单,就是把自己的指令代码写到缓冲区,然后修改返回地址为注入代码的地址即可,但通常会因为栈随机化和标记可执行代码段而失效。ROP简单来说就是在已有程序中拼凑出自己需要的指令。通过缓冲区溢出输入不同的指令地址,再通过不断地ret来执行不同片段的指令(叫做gadget)。文章目录phas

2022-01-09 15:01:26 563

原创 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 651

原创 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 880

原创 VS下载插件很慢的一种解决方法

今天用VS下AsmDude的时候发现VS下载插件特别慢,刚好前两天验证office的时候也遇到微软账号登录很慢的情况,这两种情况都可以通过下面的方式解决问题:设置→网络和Internet→以太网→更改适配器选项→打开当前连接的网络的属性取消勾选IPv6→双击IPv4→将自动获得DNS服务器地址改为手动设置,并将其设置为4.2.2.1。这是微软的DNS服务器。...

2021-11-02 15:32:21 3532 8

原创 《计算机网络自顶向下方法》笔记

1~6章是基础,之后7,8章可以看看,第9章就不看了。PS.这本书举例挺多而且易于理解。2.2.5基础通信链路和分组交换机通信链路和分组交换机把端系统连接在一起。通信链路包括同轴电缆、铜线、光纤和无线电谱,它们的传输速率不同。当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节。由此形成的信息包称作分组。分组交换机从它的一条入通信链路接收到达的分组,并从它的一条出通信链路转发该分组。分组交换机包括路由器(router)和链路层交换机(link-layer swi

2021-09-26 10:36:40 672 2

原创 MFC判断edit是否是不可写状态

在用MFC写实验的时候想要动态地切换edit编辑框的不可写状态。以前都是直接在控件的属性上设置,但不能满足在代码中动态切换的目的。在网上查到可以使用((CEdit*)GetDlgItem(EDIT_ID))->SetReadOnly(TRUE)这样的语句来使用代码动态设置其可写状态,但是根据情况的不同,有时需要可写,有时需要不可写,这里只是用代码设置其状态,但是该怎么判断其状态呢?在网上找了很久很多没有找到,最后还是在MFC的官方文档中找到说可以通过CWnd::GetStyle的返回值中的ES_R

2021-09-19 12:20:45 1351

原创 动态连通性问题: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 116

原创 算法第四版练习题:热还是冷

题目描述是要猜出1~N之间的一个秘密整数。每次猜测之后,如果相等则游戏结束,否则会得知和上一次猜测相比是更加接近(热)还是远离(冷)。我的思路是利用二分的思想,将秘密数的区间范围从1~N逐渐缩小直到找到。记录下代码:/*热还是冷?随机生成一个1~N的整数:秘密数,猜测它,如果猜对则结束相较于上一次猜测,更接近或不变时为热,否则为冷 */import edu.princeton.cs.algs4.*;import java.lang.Math;class HotColdGame {

2021-09-06 16:21:49 89

原创 力扣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 119

原创 力扣151.翻转字符串里的单词

翻转字符串里的单词题目使用额外空间的方法最先想到的方法是遍历字符串,将最终结果储存到结果字符串中。因为每个单词的顺序都要翻转,所以从字符串的末尾开始向前遍历。由于是逆序遍历,为了保持每个单词不被改变,使用栈存储每个单词的字母,再输出后就可以恢复正常顺序。对于冗余的空格,在遇到时只需将其出栈即可。class Solution {public: string reverseWords(string s) { stack<char> word_stack; //

2021-08-16 15:18:05 144

原创 力扣541.反转字符串II

反转字符串II题目这道题有两个思路,迭代和递归。迭代迭代方法从字符串的首位开始,每次操作一个长度为k的区间。如果这个区间的右端超出了边界,那么就反转剩下的所有字符串,否则反转这个区间中的字符串。每次迭代将区间向前移动2k个长度。class Solution {public: string reverseStr(string s, int k) { int length = s.length(); int left, right; char

2021-08-14 14:58:32 183

原创 力扣1.两数相加

两数相加题目思路暴力枚举的话时间复杂度是O(n²)O(n²)O(n²),既然大量时间都花费在寻找target - x上,那么就要降低查找的时间。使用unordered_map可以将查找的时间复杂度降到O(1)O(1)O(1),这样的话只需遍历一次数组,时间复杂度就可以降到O(n)O(n)O(n)。代码class Solution {public: vector<int> twoSum(vector<int>& nums, int target) {

2021-08-09 12:19:43 88

原创 力扣202.快乐数

快乐数题目思路题目中提示说对于一个正整数,要么最终到达1,要么进入无限循环。也就是说,在求平方和时出现了以前出现过的数字就表示进入了循环,也即该数不是快乐数。那么问题就转化为检查一个数字是否重复出现,我首先想到的就是将出现过的数字都放在集合里,后面每次求和都检验其是否出现过。在题解中看到了解决这种问题的第二种常规思路:快慢指针。由于每次求和的行为都可以看做链表的延伸,那么检查有无重复数字也就是检查链表有没有环,这就无可厚非地要用到快慢指针法了。代码解法一:哈希集合法class Solution

2021-08-06 11:00:20 93

原创 力扣1002.查找常用字符

查找常用字符题目思路统计每一个字符串中字母出现的频率,将其最小值记为最终答案的次数。代码class Solution {public: vector<string> commonChars(vector<string>& words) { // 储存每个字符串中相同字母出现的频率的最小值 int minFrequency[26] = {0}; // 先把第一个字符串的频率记录下来 for (int i

2021-08-04 12:36:20 78

原创 力扣242.有效的字母异位词

有效的字母异位词题目思路首先两个字符串的长度肯定得相等,否则一定不是字母异位词。然后维护一个长度为26的字母频率数组,用于存储每个字母出现的次数。第一个字符串的字母每次出现频率+1,第二个字符串的字母每次出现频率-1。这样的话,如果最终所有字母的频率都为0,则表示两个字符串的字母出现次数一样多,即是字母异位词。代码class Solution {public: bool isAnagram(string s, string t) { // 数组长度 const

2021-08-04 11:37:11 69

原创 力扣206.反转链表

反转链表题目思路思路是把原链表的每个箭头的指向都给反转过来,由于改变指向后就不能访问下一个节点,因此得使用双指针。维护一个指针newhead,指向nullptr。然后从链表的头节点开始遍历,每次把新的头节点设为当前节点的next,这是一个让原链表的箭头逐个反向的过程。就像这样:代码class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* cur = head; Lis

2021-08-01 17:55:54 111

原创 力扣977.有序数组的平方

有序数组的平方题目地址思路题目要求时间复杂度要为O(n)O(n)O(n),那就肯定不能用最简单的先赋值再排序的方法。考虑原数组是一个有序的数组,即使平方后也是十分有序的一个数组。不妨假设原数组从负数到正数,就可以将其分为两部分:前面是平方递减的,后面是平方递增的(以0位分界)。在看《算法》时记得说对于有序数组,归并排序是最快速的一种算法。因此这道题就可以考虑使用归并的思路进行解答。使用两个指针分别指向原数组的首位元素和末位元素,这也是原数组平方后最大的两头(依旧不妨设其有负有正)。从最大的两数开

2021-07-31 18:53:11 91

原创 力扣707.设计链表

设计链表题目思路就是简单的链表实现,写的时候发现删除可以不用维护pre指针,记录一下代码。代码class MyLinkedList {public: struct Node { int val; Node* next; Node() : val(0), next(nullptr) {} Node(int val, Node* next) : val(val), next(next) {} };

2021-07-30 16:05:04 59

原创 小程序发起服务器请求

在跟着学习用微信小程序做网易云音乐的时候,需要使用网易云的API,但是从前从来没有做过前后端结合的项目,这里就费了一些时间。把过程记录一下。我首先百度网易云API,按照文档教程用git bash下载网易云API。下载成功后要输入指令npm install。但npm这个指令是Node.js的,因此得先下载一个Node.js。按照这篇博客的教程成功安装好Node.js后重新执行npm install然而还是失败,跳出来很多行ERROR,看了以下报错的提示说是如果其他都没问题的话可以试试以管理员身份启动。然

2021-07-29 14:17:22 609

Vec2D类以及运算符重载.cpp

Vec2D类以及运算符重载文件,内容关于运算符重载。通过定义二维数组类来熟悉运算符重载的写法,用于博客中展示的cpp文件。

2020-03-02

空空如也

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

TA关注的人

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