自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(231)
  • 收藏
  • 关注

原创 228.线程同步(互斥、读写、自旋锁)

线程同步是指在多线程编程中控制多个线程对共享资源的访问,以避免数据竞争和不一致性。

2024-07-26 22:22:50 400

原创 227.MIT6.S081-Multithreading

本实验将使我们熟悉多线程。将在用户级线程包中实现线程之间的切换,使用多个线程来加速程序,并实现一个屏障。第一个练习让我们在用户态模拟了线程的切换,这里重要的就是进程/线程上下文的保存与恢复;第二三个练习则是让我们跳出了xv6,去熟悉pthread库和线程的同步互斥。

2024-07-24 16:01:21 630

原创 226.平均绩点

ACM模式练习。

2024-07-23 17:51:39 155

原创 225.Mit6.S081-实验六-Copy-on-Write Fork for xv6

虚拟内存提供了一定程度的间接寻址:内核可以通过将PTE标记为无效或只读来拦截内存引用,从而导致页面错误,还可以通过修改PTE来更改地址的含义。在计算机系统中有一种说法,任何系统问题都可以用某种程度的抽象方法来解决。Lazy allocation实验中提供了一个例子。这个实验探索了另一个例子:写时复制分支(copy-on write fork)。

2024-07-21 11:25:17 562

原创 224.Makefile的使用

Makefile是一种用于管理和自动化软件编译过程的文本文件。它通常包含了一系列规则,这些规则描述了如何根据源代码文件生成可执行文件或者其他目标文件。Makefile的核心概念是规则和依赖关系,规则定义了如何生成一个或多个目标文件,而依赖关系则指定了生成目标文件所需要的源文件或其他依赖文件。下面我们通过一步一步编写Makefile来学习Makefile规则。

2024-07-18 17:43:14 612

原创 223.最后一个单词的长度

【代码】223.最后一个单词的长度。

2024-07-18 15:36:30 82

原创 222.买卖股票的最佳时机(力扣)

【代码】222.买卖股票的最佳时机(力扣)

2024-07-18 15:11:14 249

原创 221.Mit6.S081-实验5-xv6-xv6 lazy page allocation

一、操作系统可以使用页表硬件的技巧之一是sbrk()。在我们给出的内核中,sbrk()。内核为一个大请求分配和映射内存可能需要很长时间。例如,考虑由262144个4096字节的页组成的千兆字节;即使单独一个页面的分配开销很低,但合起来如此大的分配数量将不可忽视。此外,有些程序申请分配的内存比实际使用的要多(例如,实现稀疏数组),或者为了以后的不时之需而分配内存。为了让sbrk()在这些情况下更快地完成,复杂的内核会延迟分配用户内存。也就是说,sbrk()。。您将在这个实验室中向xv6添加这个延迟分配特性。

2024-07-17 19:36:02 751

原创 220.贪心算法:根据身高重建队列(力扣)

它接受一个`vector<vector<int>>`类型的参数`people`,其中每个内部向量包含两个整数:第一个整数表示身高,第二个整数表示该人的k值。它接受两个`vector<int>`类型的参数`a`和`b`,并返回一个布尔值。这段代码定义了一个名为`Solution`的类,其中包含两个成员函数:一个静态比较函数`cmp`和一个成员函数`reconstructQueue`。- 使用`sort`函数对`people`向量进行排序,排序规则由静态比较函数`cmp`提供。

2024-07-12 17:18:02 601

原创 219.贪心算法:柠檬水找零(力扣)

【代码】219.贪心算法:柠檬水找零(力扣)

2024-07-12 15:42:46 433

原创 218.贪心算法:分发糖果(力扣)

在这个循环中,如果当前孩子的评分比他后一个孩子的评分高(`ratings[i]>ratings[i+1]`),则当前孩子的糖果数应该是他后一个孩子的糖果数加1和他当前糖果数中的较大值(`candyNum[i]=max(candyNum[i+1]+1,candyNum[i]);在这个循环中,如果当前孩子的评分比他前一个孩子的评分高(`ratings[i]>ratings[i-1]`),则当前孩子的糖果数应该比前一个孩子的糖果数多1(`candyNum[i]=candyNum[i-1]+1;

2024-07-12 15:24:07 1044

原创 217.贪心算法:加油站(力扣)

【代码】217.贪心算法:加油站(力扣)

2024-07-12 14:47:34 388

原创 216.Mit6.S081-实验四-Traps

本实验探索如何使用陷阱实现系统调用。您将首先使用栈做一个热身练习,然后实现一个用户级陷阱处理的示例。开始编码之前,请阅读xv6手册的第4章和相关源文件:要启动实验,请切换到traps。

2024-07-12 14:12:22 4423

原创 215.Mit6.S081-实验三-page tables

在本实验室中,您将探索页表并对其进行修改,以简化将数据从用户空间复制到内核空间的函数。

2024-07-11 19:16:37 1031

原创 214.贪心算法:K次取反后最大化的数组和(力扣)

【代码】214.贪心算法:K次取反后最大化的数组和(力扣)

2024-07-08 20:55:53 585 1

原创 213.贪心算法:跳跃游戏||(力扣)

该算法使用贪心策略,每次选择当前能跳跃的最远位置,并更新下一次能跳跃的最远位置。遍历过程中,每当到达当前能跳跃的最远位置时,增加跳跃次数,并更新当前跳跃能到达的最远位置。如果在更新过程中,发现能到达或超过终点,跳出循环。,表示最少需要跳跃两次。

2024-07-08 20:34:53 732

原创 212.贪心算法:跳跃游戏(力扣)

这个算法使用贪心算法的思路,通过遍历数组,每一步更新能到达的最远位置。如果能到达或超过数组的最后一个位置,则返回。

2024-07-08 20:09:10 590

原创 211.xv6——3(page tables)

UART0和UART0_IRQVirtio磁盘接口CLINT#define CLINT_MTIME (CLINT + 0xBFF8) // 启动以来的时钟周期数PLIC。

2024-07-04 19:48:08 697

原创 210.C++中max_element和min_element 的使用

和是 C++ 标准库中的函数,用于在容器(如 vector、数组等)中找到最大和最小元素的迭代器(或指针)。

2024-07-02 16:46:20 258

原创 209.力扣每日一题:质数的最大距离

【代码】209.力扣每日一题:质数的最大距离。

2024-07-02 16:42:32 398

原创 208.贪心算法:买卖股票的最佳时机||(力扣)

表示最大利润为7。

2024-07-02 16:08:22 195

原创 207.贪心算法:最大子数组和(力扣)

【代码】207.贪心算法:最大子数组和(力扣)

2024-07-02 15:44:51 189

原创 206.贪心算法:摆动序列(力扣)

【代码】206.贪心算法:摆动序列(力扣)

2024-07-02 15:20:13 497

原创 205.Mit6.S081-实验二 system calls

在上一个实验室中,您使用系统调用编写了一些实用程序。在本实验室中,您将向xv6添加一些新的系统调用,这将帮助您了解它们是如何工作的,并使您了解xv6内核的一些内部结构。您将在以后的实验室中添加更多系统调用。

2024-06-30 19:38:48 1548

原创 204.贪心算法:分发饼干(力扣)

以下来源于代码随想录。

2024-06-30 15:02:49 260

原创 203.回溯算法:N皇后(力扣)

【代码】203.回溯算法:N皇后(力扣)

2024-06-26 11:45:56 156

原创 202.回溯算法:全排列||(力扣)

【代码】202.回溯算法:全排列||(力扣)

2024-06-26 10:38:41 355

原创 201.回溯算法:全排列(力扣)

【代码】201.回溯算法:全排列(力扣)

2024-06-26 10:15:43 276

原创 200.回溯算法:子集||(力扣)

【代码】200.回溯算法:子集||(力扣)

2024-06-25 16:22:39 311

原创 199.罗马数字转整数(力扣)

【代码】199.罗马数字转整数(力扣)

2024-06-24 13:56:37 435

原创 198.回溯算法:子集(力扣)

【代码】198.回溯算法:子集(力扣)

2024-06-24 13:32:39 200

原创 197.回溯算法:复原IP地址(力扣)

【代码】197.回溯算法:复原IP地址(力扣)

2024-06-24 12:39:06 369

原创 196.每日一题:检测大写字母(力扣)

【代码】196.每日一题:检测大写字母(力扣)

2024-06-23 18:47:10 253

原创 195.回溯算法:分割回文串(力扣)

【代码】195.回溯算法:分割回文串(力扣)

2024-06-23 17:18:01 338

原创 194.回溯算法:组合总和||(力扣)

【代码】194.回溯算法:组合总和||(力扣)

2024-06-23 16:28:12 353

原创 193.回溯算法:组合总和(力扣)

包含所有符合条件的组合。

2024-06-23 15:46:14 413

原创 192.回溯算法:电话号码的字母组合(力扣)

这个回溯算法的时间复杂度是 O(3^n * 4^m),其中 n 是对应 3 个字母的数字(如 2、3、4、5、6、8)的个数,m 是对应 4 个字母的数字(如 7、9)的个数。这个复杂度源于每个数字对应的字母数量及其组合的所有可能性。

2024-06-22 21:59:15 307

原创 191.回溯算法:组合总和|||(力扣)

回溯算法是一种系统地搜索问题解的算法,适用于满足特定条件的所有解。在这个问题中,回溯用于从数字1到9中选出k个数,使它们的和为n。每次递归调用都会在当前组合中添加一个新的数字,并继续尝试加入更多数字,直到满足条件或不满足条件而进行剪枝。通过回溯和剪枝,可以有效地找到所有满足条件的组合。

2024-06-22 18:50:17 524 1

原创 190.回溯算法:组合(力扣)

回溯算法是一种通用的算法设计技巧,特别适用于解决组合、排列、子集等问题。它通过逐步构建解决方案,并在发现部分解决方案无效时撤销(回溯)部分计算,从而寻找所有可能的解决方案。回溯算法的基本思想是通过深度优先搜索(DFS)遍历所有可能的解空间,当发现某条路径不符合条件时,返回到上一步,尝试其他路径。

2024-06-21 15:09:37 1119

原创 189.二叉树:把二叉搜索树转换为累加树(力扣)

代码使用了递归的方法。主要思路是使用中序遍历的方式遍历二叉搜索树,但改变遍历的顺序,即先遍历右子树,然后访问当前节点,最后遍历左子树。在遍历过程中,每次访问一个节点时,将该节点的值加上其所有右子节点的值。这个算法的时间复杂度是 O(n),其中 n 是树中节点的数量。空间复杂度也是 O(n),因为需要存储递归调用的栈。

2024-06-21 11:31:38 408

空空如也

空空如也

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

TA关注的人

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