Day05 | 链表 移除链表元素&&设计链表&&反转链表
代码随想录 | Day05 | 链表:移除链表元素&&设计链表&&反转链表主要学习内容: 1.链表删除操作 2.设计自己的链表 3.双指针操作链表 203.移除链表元素203. 移除链表元素 - 力扣(LeetCode) 解法1:设置虚拟头结点设置一个虚拟头结点用虚拟头结点的next进行判断 好处是不需要写关于头结点的处理逻辑,比较容易处理 123456789101112131415161718192021class Solution {public: ListNode* removeElements(ListNode* head, int val) { ListNode * t=new ListNode; ListNode * q=new ListNode; t->next=head; q=t; while(t->next!=NULL) { ...
Day04 | 数组 螺旋矩阵II和I&&146.螺旋遍历二维数组&&数组总结
代码随想录 | Day04 | 数组:螺旋矩阵II和I&&146.螺旋遍历二维数组&&数组总结主要学习内容: 螺旋遍历二维数组 59.螺旋矩阵II59. 螺旋矩阵 II - 力扣(LeetCode) 解法一:找规律(代码随想录的方法,使用左闭右开)思路:选定一条边每次遍历多少,选定左开右闭(每次不遍历一条边第一个),选定左闭右开(每次不遍历一条边最后一个),两种思路都可以完成遍历。 找规律就是会发现:1.每次转的一共的圈数是n/2 2.每条边每次转圈会有不需要遍历的块,交给下一条边来完成,这个数量把它叫做偏移量offset,初始化为1,表示转第一圈每条边都不需要遍历最后一个块(左闭右开) 3.每一圈的起始位置相比上一圈的横纵坐标都会+1 4.n为奇数的话最后一圈只有一个数且是n/2+1圈,故可以拿出来单独处理 下图就是左闭右开 123456789101112131415161718192021222324252627282930class Solution {public: ...
Day03 | 数组 有序数组的平方&&长度最小的子数组
##代码随想录 | Day03 | 数组:有序数组的平方&&长度最小的子数组 主要学习内容: 1.双指针对数组进行操作 2.滑动窗口的一些关键点: 窗口前端后移的情况和条件 977.有序数组的平方977. 有序数组的平方 - 力扣(LeetCode) 当然要使用全都平方再sort的方法啦(bushi 解法:双指针可以按照三个指针来理解 快慢指针定义: 快指针r:指向正数最大值 慢指针s:指向负数绝对值最大值 第三个指针是循环变量i,是新数组的下标 思路:快指针指向末尾元素,即正数最大值,慢指针指向首元素,即负数绝对值最大的,快指针所指向的和慢指针所指向的作比较,更大的填写到i所指向的位置,选择了那个指针的值,则那个指针进行移动,另外一个则不动 123456789101112131415161718192021class Solution {public: vector<int> sortedSquares(vector<int>& nums) { int...
Day02 |C++ | 数组 移除元素&&删除有序数组中的重复项&&移动零&&比较含退格的字符串
##代码随想录 | 刷题记录 | Day02 |C++ | 数组 移除元素&&删除有序数组中的重复项&&移动零&&比较含退格的字符串 27.移除元素27. 移除元素 - 力扣(LeetCode) 解题思路一:暴力解法碰到val就一个一个挨着移动到val将val覆盖 123456789101112131415161718192021222324252627282930313233343536class Solution {public: int removeElement(vector<int>& nums, int val) { int res=0;//记录val数量 for(int i=0;i<nums.size()-res;i++) { if(nums[i]==val)//发现一样的 { for(int...
Day01 |C++ | 二分查找 二分查找&&搜索插入位置&&在排序数组中查找元素的第一个和最后一个位置&&x的平方根&&有效的完全平方数
代码随想录 | Day01 |C++二分查找####1 找到就行 适用于没有重复数 123456789/*关键点:1.while(l<r) or while(l<=r)2.r or l == mid+1 or mid-1 or mid3.如果为了防止mid太大的话可以选择 mid=l+(r-l)/2;主要取决于边界,分为两种第一种是左闭右闭,第二种是左闭右开*/ 1234567891011121314151617181920212223242526272829//第一种//左闭右闭 区间 l<=r 因为r==l时 [l,r]是合法的,只有一个数字 eg:[1,1] 区间内有一个元素为1//判断是等于mid+1或者-1要看到底是不是l和r在你接下来搜索的区间内//这个如果有重复元素的话有随机性,可能找到左边界可能找到右边界可能找到左右边界中间的某个数int search(vector<int>& nums, int target) { int l=0,r=nums.size()-1; ...
王道操作系统 5.3 磁盘和固态硬盘
5.3 磁盘和固态硬盘5.3.1 磁盘磁盘是可共享设备,但每个时刻至多能由一个作业启动它 磁盘结构 磁盘:磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据 磁道:磁盘的盘面被划分成一个个磁道。这样的一个“圈”就是一个磁道 扇区:一个磁道又被划分成一个个扇区,每个扇区就是一个“磁盘块”各个扇区存放的数据量相同 最内侧磁道上的扇区面积最小,因此数据密度最大 盘面:磁盘有多个盘片”摞”起来,每个盘片有两个盘面。 柱面:所有盘面中相对位置相同的磁道组成柱面。 如何在磁盘中读/写数据 磁盘的物理地址:磁盘地址用“柱面号•盘面号•扇区号”表示,可根据该地址读取一个“块” 磁盘的分类 磁头是否移动 根据盘片是否可更换 5.3.2 磁盘管理 磁盘的操作系统引导扇区产生在 对硬盘进行高级格式化的时候 磁盘初始化 一个新的磁盘只是一个磁性记录材料的空白盘。在磁盘可以存储数据之前,必须将它分成扇区,以便磁盘控制器能够进行读写操作,这个过程称为低级格式化(或称物理格式化)。 ...
王道操作系统 5.2 设备独立性软件
5.2 设备独立性软件设备独立性是指用户编程时使用的设备与实际使用的设备无关 IO核心子系统 核心子系统在开机时就调入了内存的内核区 磁盘IO也属于IO调度问题 5.2.1 与设备无关的软件 与设备无关的软件是I/O系统的最高层软件,它的下层是设备驱动程序。 设备保护: 操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等) 在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。 5.2.2 高速缓存与缓冲区引入高速缓冲的主要目的是改善CPU与设备速度不匹配的问题 缓冲区一般都开在内存 缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可以利用内存实现 磁盘高速缓存(Disk Cache) 操作系统中使用磁盘高速缓存技术来提高磁盘的I/O速度,对访问高速缓存要比访问原始磁盘数据更为高效。 ...
王道操作系统 5.1 I/O管理概述
5.1 I/O管理概述设备的读写本质是在设备控制器(IO接口)和主机之间传送数据 5.1.1...
王道操作系统 4.2 目录
4.2 目录 4.2.1 目录的基本概念 **文件目录指FCB的有序集合,一个FCB就是一个文件的目录项。**与文件管理系统和文件集合相关联的是文件目录,它包含有关文件的属性、位置和所有权等。 目录管理的基本要求: 从用户的角度看,目录在用户(应用程序)所需要的文件名和文件之间提供一种映射,所以目录管理要实现“按名存取”; 目录存取的效率直接影响到系统的性能,所以要提高对目录的检索速度; 在多用户系统中,应允许多个用户共享一个文件,因此目录还需要提供用于控制访问文件的信息。 此外,应允许不同用户对不同文件采用相同的名字,以便于用户按自己的习惯给文件命名,目录管理通过树形结构来解决和实现。 4.2.2 目录结构 FCB和索引节点在...
王道操作系统 4.3 文件系统
4.3 文件系统 4.3.1 文件系统结构 文件系统(File system)提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据。 4.3.2...













