自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构与算法:3.前缀树(Tire树)

https://leetcode-cn.com/leetbook/read/trie/x7ke5m/

2021-09-17 16:42:45 163

原创 数据结构与算法:6.双指针之滑动窗口

转发:https://github.com/labuladong/fucking-algorithm/blob/master/%E7%AE%97%E6%B3%95%E6%80%9D%E7%BB%B4%E7%B3%BB%E5%88%97/%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%8A%80%E5%B7%A7.md读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目:76.最小覆盖子串567.字符串的排列438.找到字符串中所有字母异位词

2021-08-10 18:39:07 220

原创 静态链接与动态链接

**静态链接与动态链接**转载:https://zhuanlan.zhihu.com/p/83716863

2020-11-30 09:00:27 135

原创 数据结构与算法:1.单调栈

单调栈参考链接1:https://zhuanlan.zhihu.com/p/26465701个对应练习题:1.https://leetcode-cn.com/problems/next-greater-element-i/2.https://leetcode-cn.com/problems/next-greater-element-ii/3.https://leetcode-cn.com/problems/next-greater-element-iii/4.https://leetcode-

2020-11-22 20:23:33 104

原创 C++:从extern “C”{}看C/C++混合编程

extern “C” {}讲解

2020-03-17 19:23:48 102

原创 C++:匿名命名空间

匿名命名空间概念当定义一个命名空间时,可以忽略这个命名空间的名称:namespce {char c;int i;double d;}编译器内部处理编译器在内部会为这个命名空间生成一个唯一的名字,而且还会为这个匿名的命名空间生成一条using指令。所以上面的代码在效果上等同于:namespace _UNIQUE_NAME {char c;int i;double d;}...

2020-03-17 19:06:19 206

原创 数据结构与算法(快慢指针思想)7.单链表中有环结构衍生的快慢指针算法思维

[有趣的算法思维] 1. 链表思维与快乐数(单链表思维、链表带环判断)

2020-03-15 21:38:34 113

原创 算法:大数相乘和相加

一、背景在处理两个非常大的数相加或相乘时,其结果可能会超出整型范围,下面为整型数值范围:二、解决方法超大数相乘,应该考虑使用字符串或者字符数组来存储相关的数据,再或者使用整型数组来进行处理,乘法就是将数的每一位与另一位数的所有位数相乘。...

2020-03-15 19:12:42 357

原创 数据结构与算法:8.哈希表

一、何为哈希表哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。有两种不同类型的哈希表:哈希集合和哈希映射:哈希集合是集合数据结构的实现之一,用于存储非重复值。哈希映射是映射 数据结构的实现之一,用于存储(key, value)键值对。在标准模板库的帮助下,哈希表是易于使用的。大多数常见语言(如Java,C ++ 和 Python)都支持哈希集合和哈希映射。通过选择合适...

2020-03-13 20:43:17 378

原创 字节序

一、计算机数据存储方式计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。举例来说,数值0x11223344使用4个字节储存:高位字节到低位字节分别是:0x11,0x22,0x33,0x44。二、大小端字节序大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。小端字节序:低位字节在前,高位字节在后,即以0x4433221...

2020-03-10 15:11:09 179

原创 数据结构与算法:2.并查集

https://zhuanlan.zhihu.com/p/93647900

2020-03-09 20:46:58 224

原创 Linux系统编程:(5)进程凭证

一、进程凭证每个进程都有一套用数字表示的用户ID(UID) 和组ID(GID),有时将这些ID称之为进程凭证,具体如下图所示:1. 实际用户ID和组ID实际用户ID和组ID确定了进程所属的组,标识我是谁。2.有效用户ID和有效组ID当进程尝试执行各种系统调用的时候,将结合有效用户ID、有效组ID及辅助ID来确定赋予进程的权限。例如,当进程访问一些文件、进程间通信对象之类的系统资源时,...

2020-01-04 17:36:42 245

原创 Linux系统编程:(4)用户与组、密码加密与认证

一、用户与组在讨论进程凭证之前,我们先来搞清楚用户与组的概念。每个用户都拥有一个唯一的用户名和一个与之相关的数值型用户标识符(UID),一个用户可以隶属于一个或者多个组。每个组也都有唯一的名称和一个组标识符(GID)。用户与组的主要用途包括以下两个方面:确定各种系统资源的所有权 和 对赋予进程访问上述资源的权限加以控制。1. 密码文件:/etc/passwd针对系统中每个用户账号,系统密码...

2020-01-03 11:36:38 531

原创 Linux系统编程:(3)进程内存分配

一、堆内存分配进程在运行期间可以通过增加堆(heap)的大小来为进程分配内存,在进程的内存布局中,堆是一段大小可变的连续虚拟内存,始于BSS段的末尾,随着内存的分配和释放而增减。和栈有自己的指针指向栈顶一样,堆也有指向堆边界的“program break”。1.List item调整program break:brk()和sbrk()改变堆的大小,其实就是内核改变program break...

2019-12-31 12:37:39 446

原创 Linux系统编程:(2)进程与进程内存布局

一、进程定义进程是一个可执行程序的实例;从内核角度看,进程由用户内存空间和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的变量,而内核数据结构则用于维护进程状态信息,记录在内核数据结构中的信息包括如下:与进程相关的标志号(IDs)虚拟内存表打开文件的描述符表信号传递及处理的有关信息进程资源使用及限制当前工作目录大量其他信息运行进程相关的信息均在/proc/...

2019-12-30 21:01:35 213

原创 Linux系统编程:(1)文件I/O

一、文件操作I/O1fd = open(pathname,flags,mode)打开文件返回文件描述符flag指定打开方式及一些限制,mode指定文件访问权限2numread = read(fd,buffer,maxszie)读文件自动更新文件偏移量3numwrite = write(fd,buffer,maxszie)写文件自动更新文件偏移...

2019-12-27 12:59:31 167

转载 python:xlrd、xlwt和xlutils操纵excel表格

【转自】:https://blog.csdn.net/u013250071/article/details/81911434一、需要用到的库1.操作xls格式的表格文件:读取:xlrd写入:xlwt修改(追加写入):xlutils2.操作xlsx格式的表格文件:读取/写入:openpyxl二、实现代码1.操作xls格式的表格文件# coding=UTF-8import xlr...

2019-12-25 10:16:17 270

原创 数据结构与算法(搜索):5.深度优先搜索(DFS)与栈

深度优先遍历(DFS)与 BFS 类似,深度优先搜索(DFS)也可用于查找从根结点到目标结点的路径,下面看看利用栈(stack)是怎么帮助实现DFS的。1. 结点的处理顺序是什么?在上面的例子中,我们从根结点 A 开始。首先,我们选择结点 B 的路径,并进行回溯,直到我们到达结点 E,我们无法更进一步深入。然后我们回溯到 A 并选择第二条路径到结点 C 。从 C 开始,我们尝试第一条...

2019-12-23 21:06:12 3725

原创 C++设计模式(17):组合模式

一、背景

2019-12-23 21:04:22 213

原创 C++设计模式(16):建造者模式

一、背景

2019-12-20 12:00:22 110

原创 C++设计模式(15):原型模式

一、背景

2019-12-19 21:39:51 124

原创 数据结构与算法(搜索):4. 广度优先搜索(BFS)与队列

广度优先搜索-BFS的一个常见应用是找出从根结点到目标结点的最短路径,通常这发生在树或图中。我们提供了一个示例来解释在 BFS 算法中是如何逐步应用队列的。示例:这里我们提供一个示例来说明如何使用 BFS 来找出根结点 A 和目标结点 G 之间的最短路径。1. 结点的处理顺序是 什么 ?在第一轮中,处理根结点在第二轮中,处理根结点旁边的结点;在第三轮中,处理距根结点两步的结点;……...

2019-12-14 14:58:20 420

原创 C++设计模式(14):享元模式

一、背景

2019-12-07 15:11:17 160

原创 C++设计模式(13):备忘录模式

一、背景

2019-12-07 10:26:30 89

原创 C++设计模式(12):中介者模式

一、背景

2019-12-05 16:42:10 205

原创 C++设计模式(11):责任链模式

一、背景

2019-12-03 21:18:39 586

原创 C++设计模式(10):装饰模式

一、背景在面向对象的开发中,如果想给一个类或者对象增加一个行为,首先想到的是类之间的继承,通过继承一个现有类,可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的,用户不能控制增加行为的方式和时机,如果能够用组合的做法扩展对象的行为,就可以在运行时动态的进行扩展。二、模式定义装饰者模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,增加对象功能...

2019-12-02 20:36:49 184

原创 C++设计模式(9):外观模式

一、背景二、模式定义提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更加容易使用。引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度。三、模式角色和UML类图四、模式总结使用场景优点缺点...

2019-11-22 11:52:49 126

原创 C++设计模式(8):适配器模式

一、背景在开发中,我们通常可以通过目标类提供的接口访问这个类提供的服务。有时候现有的类可以满足客户类的功能需求,但是他所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能。适配器提供客户类需要的接口,适配器的...

2019-11-20 17:11:25 94

原创 C++设计模式(7):观察者模式

一、背景二、模式定义三、模式角色和UML类图代码示例四、模式总结

2019-11-12 21:01:29 273

原创 C++设计模式(5):策略模式

一、背景在软件开发过程中,我们经常遇到实现一个功能可能需要多种不同的算法或者策略的情形,我们会根据上下文决定使用哪一种算法或者策略完成该功能。一般的做法是实现一个功能函数,通过入参结合if - else if - else来判断使用哪一种算法来完成该功能。试想,如果我们现在增加了一种实现该功能的算法,那么我们必须修改这个功能函数,为它加上对应的else if处理分支。二、策略模式定义策略模...

2019-11-09 11:09:32 193

原创 C++设计模式(4):模板方法模式

一、背景二、模板方法模式定义定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。模板方法模式是用来创建一个算法模板,什么是模板?其实就是一个方法。更加具体的来说就是这个方法将算法定义成一组固定顺序的步骤(方法),其中任何一种步骤都可以是抽象的,由子类...

2019-10-30 17:31:00 249

原创 C++设计模式(3):迭代器模式

一、背景有多种方法可以将对象堆起来成为一个集合,我们可以将它们放进数组、堆栈或者散列表中,每种方式都有各自的使用时机。但是当客户需要遍历访问这些对象的时候,最好不要让客户知道数据集合的内部实现。那么如何能让客户遍历你的对象而无又无法窥视的存储对象的方式,最常用的方式就是将对这些集合遍历的方式封装起来,不管什么形式的集合,都采用一种迭代访问的方式:迭代器模式。二、迭代器模式迭代器模式提供一种...

2019-10-25 10:32:09 248

原创 C++设计模式(2):状态模式(代码)

class GumballMachine;/* 抽象接口,在此接口内,糖果机的每个动作都有一个对应的方法 */class State{public: virtual void insertQuarter() = 0; /* 投入25分钱 */ virtual void ejectQuarter() = 0; /* 退回25分钱 */ virtual void turnCrank() ...

2019-10-19 12:00:02 200

原创 C++设计模式(2):状态模式

一、状态和有状态的对象一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的对象;这样的对象状态是从事先定义好的一系列值中取出来的,当一个这样的对象与外部事件产生互动,其内部状态就会改变,从而使得系统的行为与随之发生变化。二、状态模式状态模式:又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式;允许一个对...

2019-10-19 11:53:52 306

原创 C++设计模式(1):代理模式

一、模式定义代理模式使用代理对象完成用户请求,屏蔽用户对真实对象的访问。通过代理对象访问目标对象,这样做的好处就是可以在目标对象实现的基础上,扩展目标对象的功能。代理模式分为静态代理和动态代理。二、模式作用控制和管理对目标对象的访问三、模式的角色和UML图抽象角色:声明真实对象和代理对象的共同接口代理角色:1.代理对象角色内部含有对真实对象的引用,从而可以操作真实对象2.代理对象提...

2019-10-16 13:50:58 270

空空如也

空空如也

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

TA关注的人

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