自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 替换空格

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 解题思路: 遍历字符串,计算出空格的个数,然后扩容字符串,使指针指向扩容后的大小的位置(一个空格替换成三个字符,所以应该原大小加2*空格个数)。然后使用前后指针,一个指向源字符串末尾,一个指向修改后的末尾,依次拷贝,遇到空格则替换。(将末尾的‘\0’一并拷贝进来) class Solution { public: void replaceSpa.

2020-07-22 22:25:10 199

原创 二维数组中的查找

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解决思路: 从二维数组的第一行的最后一个元素开始查找,如果大于这个数组元素,则排除第一行;如果小于这个数组元素,则派出最后一列。依次推进。 class Solution { public: bool Find(int target, vector<vector<int> > arr.

2020-07-22 22:06:32 223

原创 LRU算法

LRU算法:最近最少使用算法。大意就是根据最近访问的记录,对缓存的数据进行淘汰。如果一个数据最近被访问,或经常访问。则把数据放到列表的前面,而数据很久未访问,或者访问率较低,就会被放在后面,在列表内存不足的时候,将其移除缓存列表。 #include <iostream> #include <unordered_map> #include <algorithm> using namespace std; //双向链表结构 struct DLinkedNode { //保

2020-07-07 11:56:03 272

原创 组队竞赛问题

题目说明 时间限制:1秒空间限制:32768K 牛牛举办了一次编程比赛, 参加比赛的有3*n个选手, 每个选手都有一个水平值a_i.现在要将这些选手进行组队, 一共组成n个队伍, 即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。 例如 : 一个队伍三个队员的水平值分别是3, 3, 3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是3, 2, 3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是1, 5, 2.那么队伍的水平值是2 为了让比赛更有看点, 牛牛想安排队伍使所有队伍的

2020-06-01 23:16:28 366

原创 典型IO模型之四

任何的IO过程,都包含两个步骤,第一是等待,第二是拷贝。而且在实际的应用场景中,等待消耗的时间往往都远远高于拷贝的时间。为了让IO更加高效,最核心的绑法就是让等待的时间尽量少。 阻塞IO: 在内核将数据准备好之前,系统调用会一直等待。所有的套接字默认都是阻塞方式。 阻塞IO的流程非常简单,一次只能进行一个IO,多个IO的情况下,过程是串行的。 缺点:进程对CPU利用率不够高(因为可能有大量的时间在...

2020-04-25 21:51:36 199

原创 排序算法之交换排序

交换排序有:冒泡排序和快速排序 冒泡排序 算法思想: 冒泡遍历所有的数据,每次对相邻元素进行两两比较,如果顺序和预定规定的顺序不一致,则进行位置交换;这样依次遍历会将最大或最小的数据上浮到顶端,之后对于其他元素重复相同的操作,直到所有的数据有序。 即:如果要升序排序的话,就每次两两比较,将较大的元素交换到后面,这样每一轮都会选择一个元素放到它规定的位置。 #include <iostream...

2020-04-22 22:46:33 559

原创 排序算法之选择排序

选择排序分为:简单选择排序和堆排序 简单选择排序的大概思想是选出最小的数和第一个数交换,再在剩余的数中又选择最小的和第二个数交换,以此类推。 堆排序的大概思想是:比如是个升序的堆,利用小根堆的性质(堆顶元素最小)不断输出最小元素,直到堆中没有元素。 简单选择排序: 简单选择排序的算法步骤为: 每次选择最小的元素归位。 从需要排序的序列中找到最小的元素; 将找到的最小的元素和第一个元素交换; 往后...

2020-04-21 00:24:54 204

原创 排序算法之插入排序

排序算法分为外部排序和内部排序,插入排序属于内部排序,内部排序即整个排序过程不需要访问外存,仅在内存中就能完成,这类问题成为内部排序。 插入排序又分为两种:直接插入排序,希尔排序。 直接插入排序: 将第一个和第二个元素排好序,然后将第3个元素插入到已经排好序的元素中,一次类推(插入排序最好的情况就是数组已经有序了) 直接插入排序的算法思想: 将数组中的所有元素依次从该元素所在位置往前和前面已经排好...

2020-04-19 22:58:25 180

原创 左右最值最大差

题目描述: 给定一个长度为n(n > 1)的整型数组a,可以将a划分成左右两个部分,左部分a[0…k],右部分a[k + 1…n - 1],k可以取值的范围[0, n - 2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少?给定整数数组a和数组的大小n,请返回题目所求的答案。 解题思路 题目可以理解为,a中的最大元素值减去a[0]或者a[n-1]。 因为max...

2020-04-17 23:34:02 283

原创 网络层IP协议

网络层:负责地址管理与路由选择; 典型协议:IP IP协议格式 4位协议版本:IPV4 / IPV6 4位首部长度:记录IP报头长度(以四字节为单位),4字节最多表示15,所有IP报头最大长度是60字节 8位服务类型(TOS):3位优先权字段(已经弃用),一位保留位(必须置0),4位TOS位分别表示:最小延时,最大吞吐量,最高可靠性,最小成本;这四者互相冲突,只能选择一个。 16位总长度:IP...

2020-04-11 23:41:18 302

原创 TCP浅析(2)

TCP协议如何实现可靠传输 TCP协议实现可靠传输的主要依仗就是它具有以下能力: 连接管理:通过连接管理保证双方都具有数据收发的能力; 确认应答机制:发送的每一个数据,都要求对方进行确认回复(通过协议字段中的序号和确认 序号实现) 超时重传机制:发送数据后一段时间内没有收到确认回复,则认为数据丢失,进行重传。 协议中校验和字段:通过协议字段中的校验和校验数据一致性,若不一致则要求对方进行重传; ...

2020-04-11 12:00:35 290

原创 【牛客网】字符串计数

题目描述 求字典序在s1和s2之间的,长度在len1到len2之间的字符串个数,结果 mod 1000007. 输入描述 每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000) 解题思路 算出两个字符串各自每位s[i]-'a’的值,得出总的字典序和Count,然后Count(s2)-Count(s1)-1 #in...

2020-04-07 23:51:12 721 2

原创 TCP浅析(1)

TCP: TCP是面向连接,可靠传输,面向字节流的传输层协议。 面向连接:通过三次握手建立连接,四次挥手释放连接,以及状态的连接管理实现面向连接。tcp是一个有状态的协议。 可靠传输:保证数据有序并且可靠的到达对端; 面向字节流:可靠的,有序的,双向的,基于连接的字节流传输(不限制上层发送/接收的数据大小) 协议格式: 16位源端口 / 目的端口:负责实现应用程序之间的数据传输。 32位序号...

2020-04-07 13:16:51 265

原创 UDP协议浅析

传输层:负责应用程序之间的数据传输; 典型协议 UDP / TCP UDP: 无连接,不可靠,面向数据包的传输协议。 无连接:知道对方的地址就可以发送数据,不需要建立连接; 不可靠:udp并不保证数据可靠的到达对端,只管数据发送出去,不关心会不会丢失。 面向数据包:无连接的,不可靠,有最大长度限制的数据传输。(小于64k) 协议格式 16位源端口 / 16位目的端口: 负责应用...

2020-04-07 13:09:06 535

原创 【Linux】基础IO接口

基础IO: 常用头文件 < fcntl.h> 标准库IO接口 c 默认会打开三个输入输出流, 分别是 stdin , stdout, stderr 这三个流的类型都是FILE*, fopen返回值类型,是个文件指针。 FILE* fopen(const char* path, const char* mode); //path:文件路径名 //mode: // r 只读 ...

2020-03-25 19:05:17 271

原创 【Linux】socket套接字接口(TCP)

TCP 通信流程 tcp协议特性:面向连接,可靠传输,面向字节流。 服务端: 创建套接字 在内核中创建socket结构体与网卡建立联系,描述协议版本,传输类型,协议类型。 为套接字绑定地址信息 给socket描述源端地址信息。 开始监听 告诉操作系统可以开始接收客户端的连接请求(客户端与服务端进行TCP通信必须首先建立 连接,确保双方都具有数据收发的能力). 当服务端收到了客户端的连接请求,连接...

2020-03-25 19:02:08 452

原创 【Linux】socket套接字接口(UDP)

UDP:用户数据包协议,特性是 无连接,不可靠,面向数据包; 应用场景:数据的实时性要求高于安全性的通信场景。例如:视频传输 socket套接字编程 套接字编程主要是: TCP通信程序和UDP通信程序的编写 应用程序是程序员开发的,应用协议是程序员自己定的,但是从传输层开始往下都是操作系统实现的。网络编程通常也叫做套接字编程,套接字实际上就是一套网络通信编程的接口,程序员可以通过这套接口,并且提供...

2020-03-18 15:49:35 364

原创 【Linux】网络基础1

网络基础 交换机:实现主机之间的数据交换 路由器:不但实现数据交换,并且实现数据的路径选择 网络的划分:局域网 ,城域网, 广域网 互联网 / 因特网 组网的方式:以太网 / 令牌环网 IP 和 PORT 在复杂的网络通信中,必须保证每个主机都有自己唯一的标识,只有这样才是实现精确的 点对点的通信。 IP地址:网络通信中主机的唯一标识 IPV4: uint32_t --无符号四...

2020-03-10 10:25:39 188

原创 【Linux】进程间通信

进程间通信 进程间因为每个进程都有一个独有的虚拟地址空间,在保证了进程独立性的同时,却使得进程间无法直接通信。为了能使进程间可以通信,操作系统提供了进程间通信的方式,因为通信场景的不同,提供的方法也有多种。 进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程; 资源共享:多个进程之间共享同样的资源; 通知事件:一个进程需要向另一个或者另一组进程发送消息,通知他们发生了某种事件。 ...

2019-12-04 20:29:27 263

原创 【牛客网】洗牌问题

问题描述 洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿 着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的 倒数第二张牌,直到最后放下左手的第一张...

2019-11-29 23:47:51 412

原创 【牛客网】拿手套问题

题目描述 在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。 给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组l...

2019-11-23 22:30:09 384

原创 Linux -- 进程控制

进程控制相关的头文件一般都是 <unistd.h> 进程创建 进程创建简单的来说就是创建一个PCB。使用 fork 库函数。 pid_t fork(); pid_f vfork(void); fork — 通过复制调用进程也就是父进程的PCB来创建一个新的子进程。fork的返回值是:父进程返回子进程的PID,子进程返回0,若创建失败返回-1. vfork — 创建子进程,父子进程公...

2019-11-21 13:23:18 278

原创 Linux -- 进程概念

进程概念 进程是什么? 简单的来说进程就是运行中的程序。而这样理解显然是不够的。 从操作系统的层面理解: 当一个程序运行起来需要将代码数据加载到内存中,操作系统中运行了很多程序,这时候操作系统就需要把这些程序先描述,再组织进行管理。对于操作系统来说,进程就像对一个运行的程序的描述。在操作系统眼里,看到进程就相当于看到了一个程序,而这个对程序的描述信息就是 — PCB(进程控制块)。 从内核观点来看...

2019-11-20 11:21:43 174

原创 【牛客网】查找组成一个偶数最接近的两个素数

题目描述 任意一个偶数(大于2)都可以由2个素数组成,要求输出组成指定偶数的两个素数差值最小的素数对。 输入: 20 输出: 7 13 解题思路 首先这个偶数num由两个素数组成,那么这两个素数一定是一个比num的一半大,另一个比num的一半小的两个数。只要从 num/2 开始向两边找到最近的素数,就是题目要求的素数对。 代码: #include<iostream> using n...

2019-11-18 16:34:40 738 1

原创 【牛客网】数组中出现次数超过一半的数字

题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组{ 1, 2, 3, 2, 2, 2, 5, 4, 2 }。由于数 字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0 共有两种解题思路: 方法一 把数组排序之后,出现次数超过一半的数一定是它中间那个数,这个很容易理解。 我们只需要把数组排序,然后找出中间位置的数字,再判...

2019-11-14 17:32:40 316

原创 【牛客网】排序子序列问题

问题描述 牛牛定义排序子序列为一个数组中一段连续的子序列, 并且这段子序列是非递增或者非递减排序的。牛牛有一 个长度为n的整数数组A, 他现在有一个任务是把数组A分为若干段排序子序列, 牛牛想知道他最少可以把这个数 组分为几段排序子序列. 如样例所示, 牛牛可以把数组A划分为[1, 2, 3]和[2, 2, 1]两个排序子序列, 至少需要划分为2个排序子序列, 所以输出2 输入输出 输入的第...

2019-11-13 16:38:28 602

原创 【牛客网】求多少步才能成为斐波那契数

题目描述 Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一 个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。 输入输出描述 输入为一个正整数N(1 ≤ N ≤ 1,000,000) 输出一...

2019-11-13 12:29:13 425

原创 【C++】内存管理

首先,了解一下C / C++的内存分布,C/C++中程序内存区域一共划分为六段: 内核空间:程序内存一般为4G,1G为内核空间这个区域用户不能读写,3G为用户空间时用户可以操作的; 栈:一般存储非静态局部变量,函数参数,返回值等,由上向下增长; 内存映射段:装在一个共享的动态内存库,用户可以使用系统接口创建共享内存,做进程间通信; 堆:用于保存动态内存分配的变量,如:malloc, new创建的...

2019-11-08 18:38:14 157

原创 【牛客网习题练习】倒置字符串

题目表述 将一句话的单词倒置,标点不倒置,例如: 输入: I like beijing. 输出: beijing. like I 实现思路 设置两个栈,先将字符串逐个压入第一个栈,如果遇到空格的话就说明一个单词结束,将第一个栈的所有元素包括空格压入第二个栈,循环执行,直到字符串全部入栈。最后,依次pop第二个栈,就可以得到倒置后的一句话。 注意: 最后一个单词需要特殊处理,否则容易遗漏。 #inc...

2019-11-06 21:46:50 376

原创 【牛客网】 字符串习题练习

**题目表述:**删除一个字符串中,另一个字符串的所有字符。 例如: str1: they are students. str2: arinu 输出: thy e stdets. //题目描述:找出一个字符串中另一个字符串的所有字符 //方法一:使用string容器的方法来简单实现 #if 0 int main() { char buf[1024]; cin.getline(buf, 1...

2019-11-06 11:25:28 398

原创 【C++】类与对象

//全局变量 g_, 局部静态变量s_, 成员变量 m_(代码规范) 结构体内存对齐:总向它的最大元素对齐,如果结构体嵌套,内部结构体被看作一个整体。 代码规范:结构体声明时候,按照变量大小,从小到大书写,避免浪费空间。 c 语言中的 struct 只是变量的打包, c++中的 struct 是一个域。 低位存低位是小端,低位存高位是大端 一、结构体在C和C++的不同 在c++中,用结构体定义...

2019-10-29 16:02:31 164

原创 C++ 类与对象(1)

关于类 C语言中结构体只能定义变量,而在C++中结构体不但可以定义变量,也可以定义函数。 struct std { int a; void fuc(); } 在定义类时一般使用class 关键字: class className{ // 类成员 } ; //必须有封号 在定义类的时候: 1.可以把成员函数声明和定义全部放在类体中...

2019-07-24 19:02:24 237

原创 【Python】 列表,元组和字典

1.序列,指的是一种包含多项数据的数据结构,序列包含的多个数据项(也叫成员)按 顺序排列,可通过索引(也叫下标)来序列成员。 2.Python常见的序列包括字符串,元组,列表,字节串,namedtuple等。 不可变序列:字符串,元组,字节串(一经创建,里面的元素不能再改变) 元组和列表(类似与数组) 列表是可变的,元组时不可变的。 元组一旦构建出来,程序不能修改元组所包含的元素(就像字符...

2019-07-23 11:02:00 314

原创 Python入门与字符串

1.Python变量: 变量无需声明即可直接赋值:对一个不存在的变量赋值就相当于定义了一个新变量。 变量的数据类型可以动态改变,同一个变量可以一会被赋值给整数值,一会被赋值给字符串。 a = 6 b = 7 a = "python" #为注释符 print(a) #输出a 函数形式 printf(a,b) #连续输出a,b中间隔空格 pri...

2019-07-21 15:42:24 331

原创 Linux -- 基础命令

Linux 命令的用法: 命令名 【功能选项】【源操作对象】【目标操作对象】 常用基本命令: 1) ls 显示目录或文件 -a 列出目录下所有文件包括以 . 开头的隐藏文件 -d 将目录像文件一样显示,但不显示其下文件 -i 列出文件并显示 inode 号 -l 列出文件的详细信息 -k 以k字节的形式表示文件的大小 -n 用数...

2019-04-27 21:00:17 453 1

原创 Linux --主要目录

关于目录 首先,在Linux系统下,一切皆文件。不同于windows系统,在Linux系统下,磁盘上的文件和目录被组成以刻目录树,每个节点都是目录或文件。先认识下部分重要目录下存放的是什么东西: 目录 存放的内容 /proc 这个目录本身是一个虚拟文件系统,用以维护系统信息和状态,包括当前运行的进程信息。它放置的数据都是在内存中,例如:系统的内核,进程,外部设备状态及网络状态等。因...

2019-04-27 19:50:25 206

原创 C++入门(2)---引用及内联函数

关于引用 引用不是新的定义一个变量,而是给已存在的变量取个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 关于引用的定义: int a = 0; int& _a = a; 引用类型必须和引用实体是同一个类型。 *引用的特性: 1.引用在定义时必须初始化。 2.一个变量可以有多个引用。 3.引用一旦引用一个实体,再不能引用其他实体。 如果引用的变量 / 对象 ...

2019-03-27 21:14:51 331

原创 C++入门(1)

命名空间 由于C++中的变量,函数和类的名称都会存在于全局作用域中,可能会造成冲突,因为重名而无法使用等问题,这时候就应该使用命名空间,命名空间的目的是对标识符的名称进行本地化,以免命名冲突或者名字污染。命名空间的关键字是namespace。具体用法如: namespace N { int a; //变量 int Add(); ...

2019-03-24 20:22:23 174

原创 判断“回文”问题

回文字符串 回文字符串 例如: abcdedcba对称的字符串就是回文字符串。 我们知道字符串再内存中是存在一段连续的空间中的,这样若想判断回文字符串,根据回文字符串的特性,可以使用两个指针,一个指针指向字符串头部,另一个指向尾部。相向一次对比,直到两个指针相遇,若是每个字符都相同则可判定是回文字符串。 int is_pal(char* str) { char* start = str; ch...

2018-12-05 23:05:26 873 1

原创 逆转整数

我们已知一个整数 n=123,现在要通过编程实现逆转得到 n=321 首先,观察刚开始 n 得值123, 要想得到 321 n % 10 --&gt; 3x10 n / 10 --&gt; n % 10 --&gt; 2*10 (30+2)*10 n / 10 --&gt; n % 10 --&gt; 1 n / 10 = 0 每取 /10 就去掉一位,%10 得到这一位的数。再经过乘法加法运...

2018-12-05 22:55:53 618

空空如也

空空如也

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

TA关注的人

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