Day08 | 哈希表 四数相加II&&赎金信&&三数之和&&四数之和
代码随想录 | Day08 | 哈希表:四数相加II&&赎金信&&三数之和&&四数之和主要学习内容: 1.哈希表的使用 2.数量大于2的数组的话将两个数组加和转为一个数组进行哈希表的查找即可 3.双指针的用法 搞清楚双指针的定义和双指针移动条件 454.四数相加II454. 四数相加 II - 力扣(LeetCode) 解法:哈希表思路: nums1中元素为a nums2中元素为b nums3中元素为c nums4中元素为d 题目不要求去重则只需要统计a+b出现的次数 map的key为a+b,value为出现的次数 然后遍历3和4数组统计0-(c+d)在哈希表中出现的次数然后相加即可 1234567891011121314151617class Solution {public: int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3,...
Day07 | 哈希表 有效的字母异位词&&两个数组的交集&&快乐数
代码随想录 | Day07 | 哈希表:有效的字母异位词&&两个数组的交集&&快乐数主要学习内容:1.哈希表的使用2.set的相关操作,find和count函数 242.有效的字母异位词242. 有效的字母异位词 - 力扣(LeetCode) 解法:哈希表思路:map容器一个记录字符一个记录数量不一样直接输出false即可 123456789101112131415161718192021222324252627282930313233class Solution {public: bool isAnagram(string s, string t) { if(s.size()!=t.size()) return false; unordered_map<char,int> ps; unordered_map<char,int> pt; for(auto c:s) ps[c]++; ...
Day06 | 链表 两两交换链表中的结点&&删除链表的倒数第N个结点&&链表相交&&环形链表II
代码随想录 | Day06 | 链表:两两交换链表中的结点&&删除链表的倒数第N个结点&&链表相交&&环形链表II主要学习内容: 1.双指针操作链表 2.哈希表在链表里的使用(表示唯一行可以存储地址) 24.两两交换链表中的结点24. 两两交换链表中的节点 - 力扣(LeetCode) 注:交换过程有多种不一定非得是图上的 错误写法错误原因 1.没有用两个结点前面的那个结点作为媒介 2.cur和pre交换完以后没有将两结点前面的结点连接到cur上(事实上也没法连接就是了) 123456789101112131415161718192021222324class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode * t= new ListNode; t->next=head; if((!head)||(!head->next)) return...
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.2 设备独立性软件
5.2 设备独立性软件IO核心子系统 磁盘IO也属于IO调度问题 5.2.1 与设备无关的软件 与设备无关的软件是I/O系统的最高层软件,它的下层是设备驱动程序。 设备保护: 操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等) 在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。 5.2.2 高速缓存与缓冲区 磁盘高速缓存(Disk Cache) 操作系统中使用磁盘高速缓存技术来提高磁盘的I/O速度,对访问高速缓存要比访问原始磁盘数据更为高效。 ...