自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Charles_Zaqdt的博客

Show me the code.

  • 博客(534)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++虚函数表深入探索(详细全面)

什么是虚函数表? 对于一个类来说,如果类中存在虚函数,那么该类的大小就会多4个字节,然而这4个字节就是一个指针的大小,这个指针指向虚函数表。所以,如果类中存在虚函数,那么编译器就会在类中生成一个指向虚函数表的指针,所有的虚函数都存在于这个表中,而所有的对象共享这一个虚函数表,虚函数表就可以理解为一个数组,每个单元用来存放虚函数的地址。 虚函数(Virtual ...

2020-03-13 00:17:48 1355 4

原创 二分图详解

        本篇博客主要讲解什么是二分图,怎样判断二分图,匈牙利算法和HK(Hopcroft-Karp)算法,以及二分图多重匹配。二分图定义:       二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B)...

2018-11-30 16:02:25 1641

原创 2018年第九届蓝桥杯B组题解

题目连接:第九届蓝桥杯试题 C\JAVA第一题:第几天答案:125很简单的数一数就好了,但是我当时可能没带脑子,按2010年算的124天。第二题:明码答案:387420489按着题目把这些数转换成8字节的二进制数就可以了,负数的二进制是补码。可以自己写个函数实现一下,实际效果图:还可以用bitset,将一个数转换成8位的二进制数,...

2018-04-02 12:11:54 22378 29

原创 Manacher(马拉车)算法详解

马拉车用于解决最长回文子串问题,重点是子串,而不是子序列,想了解最长回文子序列的可以看下这篇博客传送门。对于这种问题,当然最简单粗暴的方法就是暴力求解,但太暴力也不好,毕竟会TLE。所以对于求最长回文子串的问题有一种神奇的算法——马拉车算法,神奇就神奇在时间复杂度为O(n)。 我先说一下大概思路,就是用一个Len[i]数组去存第i个位置到mx位置的长度,然后用i...

2018-03-29 20:06:25 2920 4

原创 Python的bytes、str与unicode的区别

编写高质量Python代码的59个有效方法--第三条:了解bytes、str与unicode的区别 Python3有两种表示字符序列的类型:bytes和str,这也是Python3最重要的特性之一,对字符串和二进制数据流做了明确的分析。前者的实例包含原始的8位值;后者的实例包含Unicode字符。 Python2也有两种表示字符序列的类型:分别叫做str和unicode。与python3不同的是,str的实例包含原始的8位值;而unicode的实例,则包含unicode字符。...

2020-12-29 17:20:57 425 1

原创 Codeforces Round #642 (Div. 3) D. Constructing the Array(思维、模拟)

题目链接:https://codeforces.com/contest/1353/problem/D 题意是输入一个n,表示有一个长度为n且全为0的数组。现在需要做出n次操作,操作有两种,第一种是先选出一个长度最长的连续的0的区间,如果有多个这样的区间且长度相同,选择最左端的一个区间。第二个操作是,如果该区间的长度为奇数,那么将数组的第(l+r)/2为设为i,如果该区间长度为偶数,将数组的第(l+r-1)/2位设为i。直到n次操作结束,该数组被填满,有且只有唯一的答案,输出该数组。...

2020-05-15 01:28:51 414

转载 Linux网络I/O模型以及epoll详解

LinuxI/O网络模型:https://www.cnblogs.com/lojunren/p/3850057.html LinuxI/O复用与epoll详解:https://www.cnblogs.com/lojunren/p/3856290.html

2020-03-28 16:31:56 417

原创 Ubuntu设置时区时间

我们可以通过date来查看当前的时间时区等信息,如果不是CST时区那么可能就和当前的时间不符,我们可以通过下面的命令来设置时区:tzselect 然后依次选择Asia,China,Beijing等就可以了,然后再次查看date就可以看到已经修改成功了,但是重启开机的话可能又恢复回去了,这时我们执行下面的命令:sudo cp /usr/share/zo...

2020-03-22 18:42:41 643

原创 日志模块--手动实现printf函数demo

整体的实现思路就是传入一个字符串以及需要的参数(可变参数),通过对%的处理来获取我们所需要的类型,从而实现格式化字符串的操作( ("Hello %s world", "nginx") -> "Hello nginx world"),主要是细节的处理,比如有无符号类型,以及16进制转换和保留小数等问题,需要仔细思考。#include <stdio.h>#...

2020-03-22 17:36:57 362

原创 Linux C++守护进程demo

学习笔记#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>int ngx_deamon(){ sw...

2020-03-17 18:34:17 329

转载 VMWare Ubuntu Server 18.04共享文件夹解决方法

查了好多的方法最终都还是显示不出来共享文件夹,一般查到的都是挂载/dev/cdrom然后重装vmtools,也试了还是没有显示出来,最终找到了这个方法,终于成功了。首先要确保安装了vmtools,我们可以通过vmware-hgfsclient命令查看一下共享的目录,如果有的话说明是共享成功过的然后输入下面的命令sudo/usr/bin/vmhgfs-fuse .hos...

2020-03-16 16:54:47 1559

原创 LeetCode 5359. 最大的团队表现值(贪心)

题目链接:https://leetcode-cn.com/problems/maximum-performance-of-a-team/ 首先我们对n个人进行排序,优先效率从大到小,然后我们维护一个堆(set或者priority_queue都可以),堆中每次维护k个值,也就是我们所要选择的k个人。那么对于这前k个人来说的团队表现值就是sum*v[k-1].efficiency...

2020-03-15 15:07:51 318

原创 C++初始化列表深入探索

必须要使用初始化列表的情况:1. 当初始化一个引用的成员2. 当初始化一个const的成员3. 当调用一个基类的对象(该类继承于基类),且基类有含有参数的构造函数时4. 当调用一个类的对象成员时,且该对象成员所在的类有含有参数的构造函数时 通过下面的代码,可以更详细的说明这四种情况:#include <iostream>using na...

2020-03-11 00:10:22 261

原创 C++深拷贝和浅拷贝的深入探索

先简单的说一下什么是深拷贝,什么是浅拷贝,对于浅拷贝来说其实就是按字节拷贝,对于深拷贝来说是先申请一块自己的内存空间,然后将内容拷贝过来。可以看下下面的代码:#include <iostream>using namespace std;class A {public: int m_i; A(int tmp) :m_i(tmp) {} A(cons...

2020-03-10 18:20:55 266

原创 C++程序转化语义

显示的初始化操作 建立一个类A,首先实例化一个对象xA x; 下面有三种显示的初始化操作(也就是说在定义的时候就进行初始化操作)A x1 = x;A x2(x);A x3 = (x); 那么对于我们来说,可以理解为在实例化对象的时候通过拷贝构造函数进行了拷贝操作,那么实际上在编译器层面看来,其实将上面的一句代码分成了两句。...

2020-03-10 01:21:57 411 5

原创 LeetCode 5338. 二叉树中的最长交错路径(dfs)

题目链接:https://leetcode-cn.com/problems/longest-zigzag-path-in-a-binary-tree/ 比赛的时候没调出来,其实就是一个小地方出了问题,改两个参数就可以过...思路就是我们分类去进行深搜,记录左右两个的子节点的状态,然后判断下面的子结点,如果相反就+1,否则就重新设为1(我就是因为这里没有重新设为1,而是默认的继...

2020-03-09 10:47:58 251

原创 LeetCode 5354. 通知所有员工所需的时间(迭代)

题目链接:https://leetcode-cn.com/problems/time-needed-to-inform-all-employees/ 解法不一,可以从上向下的遍历,也可以从下往上遍历,可以深搜,也可以迭代,比赛的时候去实现的从下网上去查找,但是写复杂了,写了很多不必要的东西,其实这道题很简单。我们找到每一个叶子节点,然后从下网上搜到根节点就好了,代码也很好理解...

2020-03-09 10:42:14 248

原创 C++构造函数语义(合成默认构造函数)

在初学C++的时候,对于一个对象来说,如果我们没有去定义其默认构造函数,那么编译器就会为我们自动生成一个默认构造函数。但其实是不准确的,具体来说是编译器会在必要的时候来生成一个默认构造函数,那么这个编译器生成的默认构造函数称为合成默认构造函数。那么在以下四种情况中编译器才会生成一个合成默认构造函数:1. 含有类对象数据成员,该类对象类型有默认构造函数。2. 基类带有默...

2020-03-08 18:36:04 335

原创 LeetCode 322. 零钱兑换(贪心+dfs剪枝)

题目链接:https://leetcode-cn.com/problems/coin-change/ 这道题刚开始用bfs去写的,应该是没有剪枝吧,然后超时了,感觉加个剪枝应该也没啥问题。后来改写dfs,这道题要求使用的硬币数量尽量少,那么这里就需要贪心的去优先使用面值大的硬币,所以先sort一下,然后去dfs搜索,对于第p枚硬币,因为面值从大到小所以要尽量多的去买,所以这里...

2020-03-08 16:06:54 412

原创 C++类对象所占的内存空间

对于一个什么都没有定义的空类来说,它的大小不是0,而是1,因为实例化对象会获得一个独一无二的地址,也是为了区别该类的不同对象。在深度探索C++对象模型中是这样说的:那是被编译器插进去的一个char,使得这个class的不同实体(object)在内存中配置独一无二的地址。也就是说这个char是用来标识类的不同对象的。 如果在类中定义成员函数(包括静态成员函数),不...

2020-03-08 15:36:37 1148

原创 Linux下的SIGCHLD信号

对于父子进程来说,父进程可以通过wait或这waitpid函数来释放子进程的资源,也可以通过waitpid获得子进程的退出状态。那么这个实现过程是通过阻塞等待,或者不断的轮询。那么这两个操作对于父进程来说都不是理想的,因此可以通过SIGCHLD信号来实现异步的操作。也就是当子进程结束的时候通过SIGCHLD信号告诉父进程,然后父进程再去释放其资源,如果没有收到该信号也不影响父进...

2020-03-06 14:47:58 619

原创 Linux时序竞态问题(sleep函数的实现)

时序竞态是指同样的程序,多次调用运行的结果不同,这是由于争夺系统资源所造成的。比如说我们要使用alarm和pause函数来实现一个sleep的功能,那么由于alarm函数的实现过程并不是一个原子操作,那么随时可能被中断。比如说alarm了1秒,在这个过程中,进程失去了CPU,然后当该进程再次获得CPU的时候可能这个时间已经大于1秒了,那么对于alarm来说就已经发出了SIGAL...

2020-03-05 15:05:52 401

原创 LeetCode 994. 腐烂的橘子(多源bfs)

题目链接:https://leetcode-cn.com/problems/rotting-oranges/ 这道题刚开始看错题了,看到了图片就以为是就是从(0, 0)那个点开始,而且只有一个,然后敲完交了就wa了,然后才发现可能刚开始坏橘子有多个,而且还可能存在不连通的情况,所以就考虑多源bfs,刚开始将所有的坏橘子都扔进队列,然后bfs搜索就好了,不是很难,但是我的代码可...

2020-03-04 01:54:05 276

转载 Makefile的详细教程

初学Makefile,也只是会一些简单的语句。找到了很好的Makefile的讲解:跟我一起写Makefile,还有一个是比较不错的排版的分享一下:传送门

2020-03-03 15:43:44 252

转载 Linux的gdb调试命令(详细)

转自:[https://blog.csdn.net/gatieme/article/details/51671430](https://blog.csdn.net/gatieme/article/details/51671430?ops_request_misc=%7B%22request_id%22:%22158320384719725222455321%22,%2...

2020-03-03 11:02:54 4076

原创 Linux的内存共享映射(mmap和munmap)

Linux下的进程间通信也可以使用mmap的内存共享映射来实现,mmap的作用就是把磁盘文件的一部分直接映射到进程的内存中,那么进程就可以直接对该内存文件进行操作,mmap也设置了两种机制:共享和私有,...

2020-03-02 17:11:52 710

原创 Linux进程间通信--管道(pipe和fifo)

通过管道来实现进程间的通信的方法很经典,因为多个进程共享3-4G中的内核,所以在内核中存在一个管道(缓冲区),然后进程通过连接管道的两端从而实现通信。假如说我们现在有一根管道,我们从左端放入一个小球,那么它会从右端滚出来,那么如果我们同时向两端都放入一个小球,那么就不可能实现交叉传递了,所以管道是半双工通信(即双方都可以发送信息,但是双方不能同时发送信息),因此管道的两端一端是...

2020-02-29 20:59:00 412

原创 Linux孤儿进程和僵尸进程详解(wait和watipid)

当一个进程使用了fork函数会创建一个新的子进程,那么就会存在两个问题,一个是子进程没有结束但是父进程结束了,另一个是子进程结束了但是父进程没有回收子进程的资源。这两种情况就产生了孤儿进程和僵尸进程。下面会通过实际进程运行的示例来进行说明。首先先来明确一个知识点,在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号...

2020-02-28 16:55:40 703 1

原创 Linux下exec函数族详解

对于exec函数族来说,它的作用通俗来说就是使另一个可执行程序替换当前的进程,当我们在执行一个进程的过程中,通过exec函数使得另一个可执行程序A的数据段、代码段和堆栈段取代当前进程B的数据段、代码段和堆栈段,那么当前的进程就开始执行A中的内容,这一过程中不会创建新的进程,而且PID也没有改变。一般exec函数族的用途有以下两种: 1. 当进程不需要再往下继...

2020-02-27 17:46:41 664

原创 Linux系统编程fork详解

使用fork函数会创建一个和父进程相同的子进程。在调用了fork函数后,会先为子进程申请一个PID号,然后申请一个PCB结构,然后将父进程的PCB结构复制过来,对于父进程的虚拟空间内的内容用到了读时共享,写时复制的机制(下面会讲)。 #include <sys/types.h> #include <unistd.h>...

2020-02-27 14:26:05 355

原创 5172. 形成三的最大倍数(思维)

题目链接:https://leetcode-cn.com/problems/largest-multiple-of-three/ 因为我们要求得的数是3的倍数,那么对于sum来说,如果sum%3==1,那么sum需要减去1或者减去4才可以除尽3,所以我们可以去除一个余数为1的数,或者去除两个余数为2的数。那么对于sum%3==2我们需要减去2才可以除尽3,所以可以去除一个余数...

2020-02-23 18:02:21 296

原创 Linux 文件I/O操作(简单实现文件复制)

简单的实现一下文件的复制操作,直接贴源码了,中间也有一些注释,至于更多的详细的命令参数,推荐看下这篇博客,讲的很详细:传送门#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <st...

2020-02-19 19:49:50 1272

原创 Linux的静态库和共享库详解及实例

库的本质上是一个可执行的二进制文件,但是它并不能独立的执行。简单的来说,就相当于一个仓库,把你已经写好的功能函数放到库中,然后后续需要时通过正确的接口去使用相应的功能,当然可以把库分享给别人也很方便。在Linux下分为静态库和共享库(也叫动态库),当然Windows下也有静态库(.lib)和动态库(.dll),这里主要是讲解Linux下的静态库和共享库,以及它们的简单实现。...

2020-02-19 12:34:27 405

原创 LeetCode 1353. 最多可以参加的会议数目(贪心)

题目链接:https://leetcode-cn.com/problems/maximum-number-of-events-that-can-be-attended/ 这道题其实有好多类似的题,都是优先去找最左边的区间,又优先去挑选最右边的端点。所以对于这道题来说,如果现在是第idx天,那么最优的选的肯定是会议结束时间离idx最近的会议,大致思路就是这样,接下来会一点一点的...

2020-02-18 16:02:20 686

转载 vi常用命令--当词典用

转自:https://www.cnblogs.com/Noble-Monster/p/11289638.html

2020-02-17 17:19:43 172

原创 Ubuntu安装ftp服务器以及可能遇到的问题

使用的是Ubuntu18.04,首先使用apt命令去安装ftpsudo apt install vsftpd 安装过后其实就可以去运行ftp服务器了,使用的配置都是默认的配置,我们可以用netstat -ntl来查看ftp启用的端口 可以看到使用的是默认端口21,然后用service命令来查看ftp服务器的状...

2020-02-16 12:41:05 1146

原创 Ubuntu下U盘挂载及卸载

对于服务器版本的来说不能直接去点击U盘操作里面的内容,所以只能通过命令去操作U盘的内容。首先我们先使用sudo fdisk -l这个命令来查看一下当前的硬盘的信息,然后将我们的U盘连接至虚拟机,再次使用这个命令来查看一下,就可以查到U盘的设备名称,如下图: 然后通过mount命令将其挂载到一个文件夹中,这里以mnt为例。 ...

2020-02-15 15:04:39 1429

转载 Linux常用命令总结

转自:https://blog.csdn.net/riba2534/article/details/54340373

2020-02-14 20:20:00 175

原创 牛客寒假算法基础集训营1 G. 小a的排列(思维)

题目链接:https://ac.nowcoder.com/acm/contest/317/G 这道题在比赛的时候思路已经想出来了,但是没有实现出来...首先我们要知道一个区间要满足"萌"的条件必须是23456这样的子串,那么对于2356这样的子串我们就需要去找4,所以我们可以知道"萌"的条件就是l - r == max - min(区间长度等于区间内的最大值减最小值),那么我...

2020-02-14 20:09:09 559 5

原创 牛客寒假算法基础集训营2 A. 处女座的签到题(数学)

题目链接:https://ac.nowcoder.com/acm/contest/327/A 这道题的数据范围不大,所以可以很容易想到暴力去求解,然后我们再考虑一下做法,给了三个点,要求三角形的面积,可以用海伦公式,但是在计算的过程中精度损失过大,而且数据范围是1e9的,double存不下,所以我们还可以用向量法,来求叉积,根据数学知识可知,求得一个顶点的两个向量时,就可以求...

2020-02-14 20:09:01 353 4

2018第九届蓝桥杯

第九届蓝桥杯大赛JAVA和C/C++真题,附上题解连接https://blog.csdn.net/charles_zaqdt/article/details/79786821

2018-04-13

空空如也

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

TA关注的人

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