- 博客(59)
- 收藏
- 关注
原创 操作系统:页面置换算法/进程调度算法
写博客的原因是因为上次的百度网盘面试被问到了,但那时只记得LRU、FIFO算法,其他的没想起来 一、页面置换算法: 设计原因:当没有足够的物理内存时,系统通过把进程的一部份转移到硬盘上以设法容纳进程。当再次需要进程中的被转移到硬盘上的那一部分时,再返回到物理内存中。这个上过程称为页面调度,它使得系统即使在有限的物理内存的条件下也能够具备多任务处理的能力。1.理想页面置...
2019-08-13 16:49:01
1275
原创 LeetCode(C++):数组和字符串小结(2)
一、反转字符串中的单词 III给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例1:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc"注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。思路:记录初始不为空格位置和遇见的空...
2019-08-10 16:54:54
292
原创 LeetCode(C++):数组和字符串小结(1)
一、旋转数组给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例2:输入: [-1...
2019-08-10 16:19:12
245
原创 网易2020校招笔试-c++开发工程师
3.最大值的最小值输入 n :表示数据集合个数输入 n 个数据:1 , 3, 2, 4 ,6, 5 输出 k(子序列长度)= i 子序列中最大值的最小值 : k 表示子序列长度分别是1 2 3 4 5 6例如:当长度k=1,子序列分别是 (1), (3), (2), (4),(6), (5) 每个...
2019-08-03 19:26:23
1090
3
原创 纪念我的第一份实习(CVTE)----夭折了
从三月份准备找实习,刚开始没复习,什么知识点都记不太清,然后投的第一家公司就是CVTE,也是经历的第一个笔试,当时还对笔试的摄像头监控比较“敬畏”,话也不敢说,水也不敢喝(有点傻),然后理所当然的笔试未通过。 然后开始复习,刷题,热度持续到四月底,学校开了个运动会,三天,然后本来打算给自己放一个小假,然后放着放着给自己放了两个月。。。 当然期间笔...
2019-08-01 20:38:54
29059
4
原创 进击的墩墩:Round 1
开始刷题:一、替换空格题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。(图片来自https://www.cnblogs.com/edisonchou/p/4738106.html)解法一:倒序插入思路:1.先求出空格数black2.然后求出替换过后的新...
2019-07-31 13:51:36
1621
原创 LeetCode(C++):双指针2
同时有一个慢指针和一个快指针。一、移除元素给定一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,...
2019-04-01 16:23:56
158
原创 LeetCode(C++):双指针1
同时使用两个指针一、反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组char[]的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是ASCII码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l",...
2019-04-01 15:44:04
284
原创 LeetCode(C++):字符串
一、二进制求和给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例2:输入: a = "1010", b = "1011"输出: "10101"思路:p、q分别指向a、b的末尾,每次取一个字符并转换为int类型,carry表示进位,p+q...
2019-03-30 19:27:42
434
原创 LeetCode(C++):二维数组
一:对角线遍历给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。示例:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,4,7,5,3,6,8,9]解释:思路一:按遍历方向来按规律往结果res中添加数字,添加的顺序如下:...
2019-03-30 15:24:16
1168
原创 LeetCode(C++):数组
一、寻找数组的中心索引给定一个整数类型的数组nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1:输入: nums = [1, 7, 3, 6, 5, 6]输出:...
2019-03-27 16:22:20
344
原创 LeetCode(C++):回文数
题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是...
2019-03-20 17:41:01
305
原创 LeetCode(C++):整数反转
题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回...
2019-03-20 16:52:41
337
转载 LeetCode(C++):寻找两个有序数组的中位数
题目描述:给定两个大小为 m 和 n 的有序数组nums1和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3,...
2019-03-17 20:47:04
2196
原创 LeetCode(C++):无重复字符的最长子串
题目 :给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无...
2019-03-17 20:17:43
744
原创 LeetCode(C++):两数相加
题目:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -&g...
2019-03-15 20:54:48
1904
原创 LeetCode(C++):两数之和
题目:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]...
2019-03-15 19:44:14
242
原创 C++:单例模式
1.概念:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。2.单例模式设计方式: ① 将构造、拷贝构造屏蔽; ② 在类中提供一个唯一接口、生成唯一对象;简单单例模式代码:class SingleTon{public: static Si...
2019-02-25 17:19:01
173
原创 Linux进程间通讯(2):管道、共享内存
三、管道 管道是一种半双工通信,即允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输。管道是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于父子的进程之间,这是它与有名管道的最大区别。(1)、管道有固定大小:实际上,管道是一个固定大小的缓冲区(2)、管道读取进程比文件读取进程快:当所有当前进程数据已被读取时,管道变空。...
2018-12-04 21:33:35
551
原创 Linux进程间通讯(1):消息队列、信号量
进程间通讯有以下几种:管道、消息队列、信号量、内存共享一、消息队列消息: 数据 & 类型队列: 先进先出 优先级队列消息队列:发送带有类型的数据,读数据的进程可以根据类型获取特定的数据,并且在这一类型上遵循先进先出。 具体操作:Linux提供了一系列消息队列的函数接口来让我们方便地使用它来实现进程间的通信。它的用法与其他两个System V PIC机制,即信号量...
2018-12-04 20:42:11
432
原创 C++:类和对象
1.概念:根据下图我们可以直观的了解类和对象类:对现实生活中事物的描述对象:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。注:ADT为抽象数据类型 2.创建:[修饰符] class类名{private: 成员变量;public: 成员方法}C++三大特征:封装...
2018-11-27 19:25:34
269
原创 C++:new/delete、namespace
一、new/delete(动态开辟/释放) 在C语言中我们使用malloc动态开辟,free释放 在C++中我们使用关键字 "new"动态开辟,delete释放1.定义:动态开辟:new + 类型 变量:int *p=new int(10); // (值) ...
2018-11-23 20:57:11
158
原创 C++:引用、const
一、const 我们都知道const 修饰符修饰一个变量,使用const修饰之后,这个变量相当于常量了,它的值在代码其他部分不能再修改,这对于函数调用时候,防止错误的修改原本不应修改的变量起到很大作用。在C语言中,const修饰常变量:在编译阶段常变量没有左值,其他和普通变量处理相同。在C++中,const修饰的是常量:在编译阶段把用到常量的地方替换成常量初始值。使用...
2018-11-23 20:40:26
153
原创 C++:函数的重载、inline函数、C/C++相互调用
一、重载(overloading) :函数名字相同,而参数不同。返回类型可以相同也可以不同。 若有题目为:实现两个数相加,一般我们都会想到如下代码:int Sum(int a,int b){ return a+b;}但事实我们考虑并不全面,因为并没有给出要求是实现两个整型数相加,我们还需要考虑double、float等等其他类型,需要全面考虑,但之前在c语言中不允...
2018-11-23 19:00:37
444
原创 Linux:信号的底层实现机制
1.信号:系统先定义好的某些特定的事件,可以被发生,也可以被接受。发生和接受的主体都是进程。2.信号机制:系统预先定义好的一些事件3.进程对信号的响应方式:当进程发生时,用户可以要求进程以以下三种方式之一对信号做出响应: a.默认信号(SIG_DFL):按系统默认方式处理,大部分信号的默认操作是终止操作,且所有的实时信号的默认动作都是终止进程。 ...
2018-11-14 21:33:54
5469
2
原创 Linux:僵死进程
僵死进程的产生: 1.当父进程未结束,子进程结束,并且父进程未获取子进程的退出状态。子进程被称为僵死进程。 2.进程执行结束,进程主体(执行代码、数据、资源)都释放,而其PCB 并未释放。 3.孤儿进程:父进程死后僵死进程成为“孤儿进程”,由init接管 #include<stdio.h>#include<stdlib....
2018-11-14 21:13:51
160
原创 Linux:父子进程关系研究、fork函数
1.创建子进程(系统调用函数):pid_t fork(void)注:引用#include<unistd.h>头文件若创建失败返回-1,成功则fork函数调用一次返回两次,即在原来进程(父进程)中返回新进程(子进程)的pid,且子进程pid绝对不为0,在新进程中返回0。 #include<stdio.h>#include<stdlib.h>...
2018-11-14 20:43:29
585
原创 Linux:文件操作、用户态切内核态
1.Linux下文件操作函数: 系统调用函数:open read write close lseek stat库函数:fopen fread fwrite fclose flseek FILE *fopen(char *file,char *flag); int open(char *file,int flag,/*int m...
2018-11-13 21:54:26
378
原创 Linux:静态库、共享库、工程管理工具
1.静态库:在编译连接时,将库内容直接合并到最终的可执行文件中(相当于中间文件.o的集合) Windows下:.libLinux下:.a,即不可执行的普通文件链接:gcc -o main main.c -L. -lstatic运行./main2.共享库(动态库):在连接阶段仅仅是将使用哪个共享库设置到最终的可执行文件中,在程序运行时,才会单独加载动态库 Windows下:...
2018-11-13 21:39:34
207
原创 Linux:进程、进程状态、进程管理、进程加载
一.进程:即运行中的程序,操作系统为了唯一标识一个进程,会给进程分配一个ID,即PID 程序:存储在磁盘上可执行的二进制文件(ELF格式) 1.查看进程状态:/proc/PID/status2.进程命令: 查看进程:ps ps -e :显示系统所有的进程 ...
2018-11-13 21:10:33
321
原创 C++:调用约定、返回值的返回方式、函数的默认值
一、调用约定注:Sum表示函数名,红色字母表示调用约定,第一个H表示函数返回值类型为int,第二三个H表示形参类型为int1.__cdcal:c标准调用约定 //?Sum@@YAHHH@Z __cdecl由调用方进行形参开辟栈区,参数从右至左入栈,然后由调用者清理栈区。2.__stdcall:windows调用约定 //?Sum@@GZ...
2018-11-13 20:54:29
707
原创 C++:函数的堆栈调用过程
一、函数的堆栈调用 以简单求和代码为例具体分析:#include<iostream>int Sum(int a ,int b){ int tmp=0; tmp=a+b; return tmp;}int main(){ int a=10; int b=20; rt=Sum(a,b); return 0;...
2018-11-13 20:49:06
549
原创 C++:虚拟地址空间、编译链接过程
1.虚拟地址空间: 在Linux下的虚拟地址空间中,用户空间、内核空间以3:1划分,即3G大小的用户空间和1G大小的内核空间,具体各区域划分如图:小补充:思考全局变量与局部变量各自存储在什么段?#include<iostream>int gdata1=10;//.dataint gdata2=0;//.bssint gdata3;//.bss...
2018-11-13 19:13:13
452
原创 Linux操作系统:基础操作(2)
四、进程管理命令.rw-rw-r--. 1 stu stu 731 Jul 19 18:18 main.c文件类型 权限 属主 组 文件大小 最后修改时间 文件名rw- rw- r--: r:读属主 组 其他 w:写 ...
2018-11-07 21:27:51
191
原创 Linux操作系统:基本操作(1)
谨记:Linux上一切皆文件 一、Linux文件存储层次结构:(树状) /bin:命令对应的可执行文件/etc:配置目录 配置文件/proc:/mnt:临时挂载点/usr:第三方软件所使用的资源/home:普通用户的家目录,每个用户都会在/home下有...
2018-11-07 21:25:31
203
原创 数据结构习题(2):单链表
1.寻找单链表倒数第K个节点。Node* find_k(PLink phead, int k){ Node* pfast = phead->pnext; Node* pslow = pfast; for (int i = 0; i < k - 1; ++i) { pfast = pfast->pnext; } while (pfast->pnext...
2018-11-07 20:38:16
282
原创 数据结构习题(1):单链表
(部分基于之前的代码) 1.设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。int InsertSort(PDSeqList pl,ELEM_TYPE val){ if(pl == NULL) { return false; } int index = 0; for(int i = 0; i < pl->cur...
2018-11-07 20:34:56
881
原创 数据结构:归并排序、基数排序
1.归并排序:是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 例:设有数列{6,202,100,301,38,8,1}初始状态:6,202,100,301,38,8,1第一次归并后...
2018-11-07 13:26:09
305
原创 数据结构:交换排序(冒泡排序、快速排序)
1.冒泡排序,它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该...
2018-11-06 22:04:40
251
原创 数据结构:选择排序(简单选择排序、堆排序)
1.简单选择排序:指一种排序算法,在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。方法是设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。 2.堆排序:是指利用堆这种数据结构所设计的一...
2018-11-06 21:56:23
396
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人