- 博客(20)
- 资源 (1)
- 收藏
- 关注
原创 代码随想录笔记-链表
这就意味着,从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是环形入口的节点。,n为fast指针在环内走了n圈才遇到slow指针,$ (y+z)$为 一圈内节点的个数A。找到翻转区间,保存前后节点,然后断开要反转的部分,反转参考206题,然后重新连接,更新指针,环形入口节点到 fast指针与slow指针相遇节点 节点数为。从相遇节点 再到环形入口节点节点数为$ z$。假设从头结点到环形入口节点 的节点数为。链表的增加和删除都是。
2025-04-15 13:51:47
793
原创 MIT 6.S081 Lab 8 lock
互斥(一个资源在任何时候只能属于一个线程)请求保持(线程在拿着一个锁的情况下,去申请另一个锁)不剥夺(外力不强制剥夺一个线程已经拥有的资源)环路等待(请求资源的顺序形成了一个环)锁和中断的交互也可能造成死锁。比如当sys_sleep拥有tickslock时,发生定时器中断,定时器中断的handler也需要,就会等待sys_sleep释放,但是因为在中断里面,只要不从中断返回sys_sleep就永远无法释放,因此造成了死锁。对这种死锁的解决方法是:如果一个中断中需要获取某个特定的。
2025-04-14 17:31:58
893
原创 MIT 6.S081 Lab 7 Multithreading
作用:声明一个互斥锁变量。功能:用于保护共享资源,确保同一时间只有一个线程可以访问临界区代码,防止数据竞争(Data Race)。互斥锁需要先初始化后使用。静态初始化可使用宏,动态初始化需调用。作用:初始化互斥锁。&lock:指向互斥锁的指针。NULL:表示使用默认属性(如非递归锁)。也可通过属性对象设置特殊行为(如递归锁、优先级继承等)。注意:动态初始化的互斥锁需在不再使用时调用释放资源。作用:尝试获取互斥锁。若锁未被持有,线程立即获得锁并继续执行。
2025-04-13 14:01:54
892
原创 MIT 6.S081 OS La6 Copy-on-Write Fork
虚拟内存提供了一种间接性:内核可以通过将PTE标记为无效或只读来拦截内存引用,从而导致页面错误,并可以通过修改PTE来更改地址的含义。计算机系统中有一种说法,任何系统问题都可以通过一定程度的间接解决。懒惰分配实验提供了一个例子。本实验室探讨了另一个例子:写时复制的fork。xv6中的fork()系统调用将父进程的所有用户空间内存复制到子进程中。如果父对象很大,复制可能需要很长时间。更糟糕的是,这些工作往往被大量浪费;
2025-04-10 19:01:17
710
原创 MIT 6.S081 OS Lab5 lazy allocation
对地址空间、sp指针的位置不清晰以及杀死进程的操作有误,导致耗费了很长时间。killed置位之后,不需要进行后续的分配页面和映射操作,直接goto err。walkaddr函数中不要进行kill操作,该函数只是寻址操作,寻址不正确自会在caller函数kill进程栈指针的位置。在上面的代码中用的判断条件是,但是看到有些博客写的是或者也可以通过测试(不知道原因)。首先xv6的栈在低地址的位置,上方是堆其次xv6的栈由高地址向低地址增长trapframe中的sp指针,指向栈顶。
2025-04-09 18:07:41
951
原创 MIT 6.S081 OS Lab3 page tables
根据文本中的图3-4解释vmprint的输出。第0页包含什么?第2页是什么?在用户模式下运行时,进程能否读取/写入第1页映射的内存?参考修改_vmrpint函数打印出来的flag信息如下根据标志位信息,page0具有权限UXWRV,page1具有权限XWRV,page2具有权限UXWRX结合下图进程地址空间,page0 应该主要是应用程序的代码段和数据段;而 page2 即对应着用户栈;中间的 page1 应该是 guard page, 无物理地址实际映射, 用于溢出检测.
2025-04-07 20:42:29
813
原创 代码随想录笔记 - 数组
知识点有二分查找,注意边界的处理,左闭右闭区间和左闭右开区间的处理。快慢指针处理数组删除可以达到OnO(n)On时间复杂度。滑动窗口,快慢指针的一种用法,在某些求满足条件的最小窗口时可用。前缀和,与求区间元素和有关的问题可以预处理前缀和省去后续的计算循环。参考链接代码随想录 - 数组。
2025-04-02 21:27:56
797
原创 代码随想录笔记-图论
负权回路是指一系列道路的总权值为负,这样的回路使得通过反复经过回路中的道路,理论上可以无限地减少总成本或无限地增加总收益。函数中 rank 小的树合入 到 rank 大的树,这样可以保证最后合成的树 rank 最小,降低在树上查询的路径长度。函数的过程中,我们知道,通过递归的方式,不断获取father数组下标对应的数值,最终找到这个集合的根。算法则根据启发式函数,有方向的往目标出搜索, 实现此的关键在于启发式函数和堆的使用。函数)将非根节点的所有节点直接指向根节点,减小下一次搜索的递归次数。
2025-03-07 12:23:59
526
原创 21.1.30 LeetCode 1559. Detect Cycles in 2D Grid
1559. Detect Cycles in 2D Grid题意给定一个大小为m*n的二维字符数组网格,您需要找出网格中是否存在由相同值组成的循环。循环是网格中长度为4或更多的路径,在同一单元格开始和结束。从给定的单元格中,可以移动到与其相邻的单元格中的一个,如果该单元格的值与当前单元格的值相同,则移动方向为四个方向之一(上、下、左或右)。此外,您不能移动到上次移动时访问的单元格。例如,循环(1,1)->(1,2)->(1,1)无效,因为从(1,2)我们访问了(1,1),这是最后访问的单
2021-01-31 10:51:17
165
原创 21.1.29 LeetCode 1224. Maximum Equal Frequency
1224. Maximum Equal Frequency题意给定一个正整数数组nums,返回nums数组前缀的最长可能长度,这样就可以从这个前缀中删除一个元素,这样出现在其中的每个数字都会有相同的出现次数。如果删除一个元素后没有剩余的元素,则仍然认为每个出现的数字都有相同的出现次数(0)。思路思路来源代码#include <stdio.h>int max(int a, int b){ return a > b ? a : b;}int maxEqualFreq(i
2021-01-31 10:50:56
187
原创 21.1.28 LeetCode 218.The Skyline Problem
218. The Skyline Problem题意一座城市的天际线是从远处看时,该城市所有建筑物形成的轮廓的外部轮廓。给定所有建筑的位置和高度,返回这些建筑共同形成的天际线。每个建筑物的几何信息在阵列建筑物中给出其中建筑物[i]=[lefti,righti,heighti]:lefti是第i个建筑左边缘的x坐标。righti是第i个建筑右边缘的x坐标。heighti是第i栋楼的高度。你可以假设所有的建筑都是完美的长方形,坐落在高度为0的绝对平坦的表面上。天际线应表示为按x坐标排序的“
2021-01-31 10:50:34
155
原创 21.1.27 LeetCode Determine if Two Strings Are Close Solution
Determine if Two Strings Are Close题意如果可以使用以下操作从另一个字符串中获得一个字符串,则认为两个字符串是接近的:1:交换任何两个现有字符。 例如,abcde->aecdb2:将一个现有字符的每个匹配项转换为另一个字符,并对另一个 字符执行相同的操作。例如,aacabb->bbcbaa(所有a都变成b,所有b都变成a)您可以根据需要多次对任一字符串使用这些操作。给定两个字符串word1和word2,如果word1和word2接近,则返回tr
2021-01-31 10:50:05
93
原创 21.1.26 LeetCode 135 Candy
135.Candy题意有N个孩子排成一行。为每个孩子分配一个等级值。您向这些儿童提供的糖果应符合以下要求:1.每个孩子必须至少有一个糖果。2.得分较高的孩子比他们的邻居得到更多的糖果。你至少需要多少糖果?思路1:1.从左往右扫描,确保得分高的获得糖果多;2.再从右往左扫描,确保左边得分高的比右边得到糖果多;3.满足以上两步则满足题意代码 #include <stdio.h>int candy(int* ratings, int ratingsSize){ int
2021-01-31 10:49:41
86
原创 21.1.25 LeetCode Longest Substring Without Repeating Characters
Longest Substring Without Repeating Characters题意给定一个字符串s,求最长子字符串的长度(不含重复字符)。思路1.对于长度i的字符串,比对是否有满足题意的答案2.有则记录i,并判断i+1;3,若对于所有长度为i的字符串都不符合题意没有则返回i-1代码#include <stdio.h>bool check(int length, int start,char *s){ for (int i = 0; i < len
2021-01-31 10:49:18
70
原创 21.1.24 LeetCode 300. Longest Increasing Subsequence
300. Longest Increasing Subsequence思路思路来源#include <stdlib.h>#include <stdio.h> int lengthOfLIS(int* nums, int numsSize){ int answer = 1; int arr[numsSize]; for (int i = 0; i < numsSize; i++) arr[i] = 0; arr[0] = nums[0]; int tem
2021-01-31 10:48:55
66
原创 21.1.21&22 LeetCode 1414&1640
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-01-24 19:30:58
125
原创 21.1.23 回溯算法 LeetCode52-n皇后
(记录一下道阻且长的学习之路)回溯算法回溯算法是一种将问题的的解空间按树状图形式展开,在寻找问题的解时使用深度优先搜索策略进行遍历(暂时也不懂啥意思),并记录寻找可行解或最优解。回溯算法一般会应用于地图路线之类的问题的解决吧看了一下大概有以下几类(1)装载问题 (2)0-1背包问题 (3)旅行售货员问题 (4)八皇后问题 (5)迷宫问题 (6)图的m着色问题学习链接是https://blog.youkuaiyun.com/weiyuefei/article/details/79316653Leet
2021-01-24 19:04:33
123
1
清空树莓派pico原始程序文件
2023-05-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人