自定义博客皮肤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 AreHappy.则经过替换之后的字符串为We%20Are%20Happy。解题思路:遍历字符串,计算出空格的个数,然后扩容字符串,使指针指向扩容后的大小的位置(一个空格替换成三个字符,所以应该原大小加2*空格个数)。然后使用前后指针,一个指向源字符串末尾,一个指向修改后的末尾,依次拷贝,遇到空格则替换。(将末尾的‘\0’一并拷贝进来)class Solution {public: void replaceSpa.

2020-07-22 22:25:10 131

原创 二维数组中的查找

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

2020-07-22 22:06:32 148

原创 LRU算法

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

2020-07-07 11:56:03 171

原创 组队竞赛问题

题目说明时间限制: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 264

原创 典型IO模型之四

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

2020-04-25 21:51:36 124

原创 排序算法之交换排序

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

2020-04-22 22:46:33 459

原创 排序算法之选择排序

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

2020-04-21 00:24:54 143

原创 排序算法之插入排序

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

2020-04-19 22:58:25 120

原创 左右最值最大差

题目描述:给定一个长度为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 218

原创 网络层IP协议

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

2020-04-11 23:41:18 225

原创 TCP浅析(2)

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

2020-04-11 12:00:35 170

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

题目描述求字典序在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 558 2

原创 TCP浅析(1)

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

2020-04-07 13:16:51 159

原创 UDP协议浅析

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

2020-04-07 13:09:06 367

原创 【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 181

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

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

2020-03-25 19:02:08 316

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

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

2020-03-18 15:49:35 270

原创 【Linux】网络基础1

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

2020-03-10 10:25:39 116

原创 【Linux】进程间通信

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

2019-12-04 20:29:27 172

原创 【牛客网】洗牌问题

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

2019-11-29 23:47:51 310

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

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

2019-11-23 22:30:09 294

原创 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 148

原创 Linux -- 进程概念

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

2019-11-20 11:21:43 96

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

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

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

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

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

2019-11-14 17:32:40 205

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

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

2019-11-13 16:38:28 492

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

题目描述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 338

原创 【C++】内存管理

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

2019-11-08 18:38:14 84

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

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

2019-11-06 21:46:50 280

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

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

2019-11-06 11:25:28 311

原创 【C++】类与对象

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

2019-10-29 16:02:31 96

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

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

2019-07-24 19:02:24 124

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

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

2019-07-23 11:02:00 229

原创 Python入门与字符串

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

2019-07-21 15:42:24 253

原创 Linux -- 基础命令

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

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

原创 Linux --主要目录

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

2019-04-27 19:50:25 120

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

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

2019-03-27 21:14:51 224

原创 C++入门(1)

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

2019-03-24 20:22:23 115

原创 判断“回文”问题

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

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

原创 逆转整数

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

2018-12-05 22:55:53 523

空空如也

空空如也

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

TA关注的人

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