自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 求两个字符串的最长公共子串的长度

int getLCSLength(string str1, string str2){ if(str1.size()==0 || str2.size()==0) return 0; int** temp=new int*[str1.size()]; for(int i=0;i<str1.size();++i) temp[i]=new int[str2.size()]; i

2016-09-29 00:04:23 760

原创 C++新特性

C++新特性:1.nullptr  特殊类型的字面值,可以转换成任意其他的指针类型。2.auto类型说明符  编译阶段推算 类型;利用auto在一条语句中定义多个变量时,所有变量的初始数据类型必须一样。Auto 针对const 类型数据的推算有一定的区别,一般会忽略顶层的const(如果希望推算出来的类型是顶层const,则需明确指出const auto),保留底层的const(底层con

2016-08-30 12:29:58 404

原创 c++内存泄露检测

VS平台下提供了CRT库检测和识别内存泄漏的有效方法。原理大致如下:内存分配要通过CRT在运行时实现,只要在分配内存和释放内存时分别做好记录,程序结束时对比分配内存和释放内存的记录就可以确定是不是有内存泄漏。#define _CRTDBG_MAP_ALLOC //必须放在#include之前#include #include #include#ifdef _DEBUG

2016-08-12 17:21:34 2348

原创 死锁

概念: 多个并发进程因争夺(互斥)资源而产生相互等待的现象。产生死锁的本质原因:1)资源有限;2)进程推进顺序不合理。产生死锁的必要条件:1)资源互斥。2)资源占有并等待,指一个进程必须占有至少一个资源,同时又等待另一资源,而该资源已被其它进程占有。3)不能抢占资源。4)循环等待。存在等待进程集合{P0,P1,P2,···,Pn},其中的P0正在等待一个P1占用的资源;P1

2016-08-08 21:00:04 1828

原创 进程间通信(IPC)以及同步

1.共享内存      共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式。2. 信号量          信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。它常作为一种锁机制,防止某进程正

2016-08-05 17:52:31 1712

原创 正则表达式匹配规则

正则表达式:主要作为一个模板用于字符串模式匹配。它其实就是一组描述字符串特征的字符,表示字符串的结构组成规则。        正则表达式=普通字符+元字符(特殊字符)元字符:一些具有特殊功能的字符,下面列出常见的几种元字符。下面是一些表示任意普通字符的元字符:.匹配除换行符以外的任意字符\w匹配字母或数字或下划线或汉字\s匹配

2016-06-28 21:38:54 863

原创 动态规划

动态规划解题的基本思路:首先我们要决定要存储什么历史信息以及用什么数据结构来存储信息。然后是最重要的递推式,就是如从存储的历史信息中得到当前步的结果。最后我们需要考虑的就是起始条件的值。1.word-break原题链接参考:bool wordBreak(string s, unordered_set &dict) { int l=s.size()

2016-06-13 10:24:55 306

原创 小飞的电梯调度算法

亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都停。实习生小飞常常会被每层都停的电梯弄的很不耐烦,于是他提出了这样一个办法:由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘客从一楼上电梯,到达某层后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则计算出

2016-06-12 21:26:15 364

原创 数组中只出现一次的数字

1.一个整型数组里除了3个数字之外,其它的数字都出现了2次。请写程序找出这3个只出现1次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。int MakeLastBit1(int num){ //保留num二进制数中最后一位1,其余位都变成0 num=num&(num-1)^num; return num;}int FindLastBit1(int num){//寻找最后是1的位

2016-06-06 22:49:27 267

原创 字符串的排列和组合

1.字符串排列void Permutation(string &str, int j, int n){ if(j==n){ cout<<str<<endl; return; } for(int i=j;i<n;++i){ char temp=str[i]; str[i]=str[j]; str[j]=temp; Permutation(str,j+1,n);

2016-06-03 11:28:48 259

原创 从八皇后问题到n皇后问题(leetcode)

1. 题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角斜线上。下图中的每个黑色格子表示一个皇后,这就是一种符合条件的摆放方法。请求出总共有多少种摆法。int totalNQueens(int n) { int result=0; vector path; for(int i=0;i<n;+

2016-06-02 22:41:55 1390 1

原创 字符串正则表达式匹配

题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。 bool match(char* str, char* pattern)

2016-05-31 10:42:56 479

原创 高级数据结构B树

定义:一颗M阶的B树1)根节点的孩子数为2~M;(关键字个数1~M-1)2)非根节点的孩子数为[M/2]~M。[x]上限函数。(关键字个数M/2]-1~M-1)3)所有的叶子节点都在同一层。4)有y个孩子的非叶子节点,其拥有y-1个关键字元素,且其按由小到大顺序排列。B树的插入(插入一个关键字元素):思路:1)在B树中Find此关键字是否存在,若

2016-05-23 20:57:36 337

转载 设计模式之对象池模式(Object Pool)

http://blog.csdn.net/wcyoot/article/details/7584574http://www.cnblogs.com/west-link/archive/2011/09/05/2167149.html对象池模式今天忽然看到一个有趣的设计模式,就上网看了下,现做一个整理。 前期了解:Object Pool,即对象池,对象被预先创建并初始化

2016-05-19 10:21:09 8708

原创 回溯法,DFS的应用

1.矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个

2016-05-18 20:07:58 664

原创 设计模式总结

模式:在一定的环境下,用固定的套路解决问题。设计模式的基础:多态(继承,虚函数重写,基类指针指向子类对象)。设计模式理解:将简单的问题复杂化(标准化),将其不断拆分,方便用固定的套路去解决。设计模式分为三类(23种):创建型模式:用来处理对象的创建过程       1. 单例模式       2.工厂模式       3.抽象工厂模式       4.建造者

2016-05-18 11:29:28 253

原创 设计模式之建造者模式

建造者模式题外话:面向对象的一个重要指导思想就是,封装隔离变化的,留出不变的。特点:一个对象的构建比较复杂,则将对象的构建和对象的表示(要被创建的产品)进行分离。角色:Product:所要构建的复杂对象。Builder:定义创建对象过程的抽象,提供构建不同组成部分的抽象接口。他和产品之间的关系是关联,即拥有一个产品属性的成员变量。ConcreteBuil

2016-05-18 10:33:29 227

原创 设计模式之外观模式

外观模式特点:外观模式其实定义了一个高层接口(将各个子系统的中的操作打包),该接口为多个子系统中的一组接口提供一个一致的界面,使得子系统更加容易使用。它对客户屏蔽了子系统组件,减少了客户处理的对象的数目,实现了子系统与客户之间的松耦合关系。角色:外观(Facade)角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况

2016-05-17 21:55:59 202

原创 设计模式之模板模式

http://www.cnblogs.com/jiese/p/3180477.html模板模式特点:在抽象类中抽象出统一的一套操作步骤,里面有一个模板函数,它提前将业务逻辑制定好,即各个子函数的调用顺序提前规定好。但是这里只是含有各个子函数的逻辑申明,而各个子函数的具体实现是在其各个子类中实现的。角色:AbstractClass是抽象类,其实也就是一个抽象模

2016-05-17 21:12:30 241

原创 设计模式之策略模式

http://blog.csdn.net/lcl_data/article/details/10255125http://www.cnblogs.com/jiese/p/3181099.html策略模式特点:它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。角色:Stragegy类,策略

2016-05-17 20:43:00 229

原创 设计模式之命令模式

命令模式特点:针对3类对象(命令,命令的发起者,命令的实行者)。将每一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求进行管理(请求进行排队或记录请求日志,以及支持可撤销的操作)。角色:Command类:用来声明执行操作的接口。ConcreteCommand类:将一个接收者对象绑定与一个动作,调用接收者相应的操作,以实现Excute。

2016-05-17 11:24:30 241

原创 设计模式之组合模式

组合模式特点:用于将对象组合成树状结构,展示出“部分--整体”的层次结构。这里,单个对象和组合对象具有相同的行为接口,使得用户对单个对象和组合对象的使用具有一致性,忽略组合对象和单个对象之间的差别。角色:Component: 抽象基类,为组合中的对象声明接口,在适当情况下实现所有类共有接口的缺省行为。Leaf: 在组合中表示叶节点子类,叶节点没有子节点,并定义其行为。

2016-05-16 22:05:37 226

原创 设计模式之桥接模式

桥接模式特点:多对多的关系(多维元素在变化),仅用继承实现不太合理。Bridge用于将表示和实现解耦,两者可以独立的变化.角色:Abstraction::Operation():定义要实现的操作接口。在Abstraction类中维护一个Implement类指针(成员变量),需要采用不同的实现方式的时候只需要传入不同的Implement派生类就可以了。Implement:

2016-05-16 20:01:46 222

原创 设计模式之迭代器模式

迭代器模式特点:提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。角色:迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。集合角色(Aggregate):集合角色负责提供创建具体迭代器角色的接口。具体集合角色

2016-05-13 21:56:43 229

原创 设计模式之装饰模式

装饰模式题外话:对一个类a进行功能性增强一般有一下几个方法:1.直接对类a中代码进行修改;2.创建一个新类,让它去继承类a;3.进行内部关联,创建一个新类,让其包含一个a类变量。角色:Component:定义一个对象接口,可以给这些对象动态地添加职责;ConcreteComponent:定义一个具体的Component,继承自Component,重写了Compo

2016-05-13 17:29:04 233

原创 设计模式之代理模式

代理模式特点:a类(proxy类)中包含b类(realsubject类),a,b类实现协议类(subject类,即共同接口)。角色:subject类,定义realsubject与proxy的共用接口,这样在任何使用realsubject的地方都可以使用proxy代替。realsubject类,定义proxy所代表的实体,拥有一个和subject类相同的接口。proxy类

2016-05-13 16:15:06 227

原创 设计模式之三种工厂模式

1.简单工厂模式特点:简单工厂模式是工厂模式中最简单的一种,他可以用比较简单的方式隐藏创建对象的细节,一般只需要告诉工厂类所需要的类型,工厂类就会返回需要的产品类,但客户端看到的只是产品的抽象对象,无需关心到底是返回了哪个子类。每次添加一个产品子类都必须在工厂类中添加一个判断分支。角色:抽象工厂类抽象产品类具体产品类class Fruit{public: virtual

2016-05-13 11:13:31 217

原创 设计模式之适配器模式

http://blog.csdn.net/lcl_data/article/details/8780140适配器模式特点:将一个类的接口转换成客户希望的另一个接口。通过适配器模式可以改变已有类的接口形式。涉及到的角色:目标(Target)角色:这是客户所期待的接口。源(Adaptee)角色:需要适配的类。适配器(Adapter)角色:把源接口转换成目标接口。这一

2016-05-13 10:37:07 208

原创 设计模式之观察者模式

观察者模式特点:定义对象间的一对多的依赖关系,即多个观察者和一个主题对象键的依赖关系。当主题对象状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。即一个改变时,依赖其的其他对象也会跟着更新自己。模式中的四个角色:Subject 类,可翻译为主题或抽象通知者,一般用一个抽象类或者一个借口实现。它把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽

2016-05-12 22:06:49 219

原创 二叉树(补充)

1.二叉树的下一个节点  给定一个二叉树和其中的一个结点,请找出中序遍历(左,根,右)顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:1)当前节点的右子树存在,则在其右子树中一直向左遍历,则下一节点就是最左边的叶子节点。            2)当前节点的右子树不存在且当前节点是其父节点的左子节点,则其父节点就是下一节点。   

2016-05-12 15:48:43 405

原创 STL 源码剖析 String类

http://wenku.baidu.com/link?url=fcbPJMRI35cbrqy1vO-J10JWx4Jfjh_L_JS9U3YapgF8bkU6_YAVLyZqHlT7_9gBd_RR_bNUjSyCsTkk_MRCrcJwRp6LvVKcHj6kUAD-iIWhttp://blog.csdn.net/moxiaomomo/article/details/6411584

2016-05-11 21:49:12 284

原创 单例模式

单例模式:只能实例化一个对象的类特点:1)构造函数私有化2)一个指向唯一实例的私有的静态指针变量3)一个静态的公有函数来获取唯一实例1.懒汉式class Singleton{private: Singleton(){//构造函数私有化 cout<<"execute"<<endl; }public: static Singleton *GetInsta

2016-05-05 22:08:50 195

原创 字符串匹配之KMP算法

http://blog.csdn.net/v_july_v/article/details/70418271.暴力匹配法int ViolentMatch(char* s, char* p) { int slen=strlen(s); int plen=strlen(p); int i=0,j=0; while(i<slen && j<plen){ if(p[j]==s[i])

2016-05-04 20:37:23 207

原创 打印1到最大的n位数

思路:n位数全排列,递归用数组来存储大数,防止溢出#includeusing namespace std;void print(int* num, int n){ if(!num || n<=0) return; int j=n; for(int i=0;i<n;++i){ //最高位在num[0] if(num[i]!=0){ j=i; break; }

2016-04-27 22:25:16 204

原创 队列和栈

用两个队列实现栈的压入和弹出(这里弹出时会返回弹出的元素)#include#include#include#includeusing namespace std;queue q1,q2;// 队列实现栈void push(int x){ q1.push(x);}int pop(){ while(q1.size()>1){//当q1中只有一个元素时,即最后入队的值

2016-04-27 21:41:54 244

原创 linux常用命令

显示文件目录命令ls        如ls  改变当前目录命令cd        如cd /home  建立子目录mkdir           如mkdir xiong  删除子目录命令rmdir       如rmdir /mnt/cdrom  删除文件命令rm            如rm /ucdos.bat  文件复制命令cp

2016-04-26 20:39:45 182

原创 快排的非递归实现

http://www.360doc.com/content/14/0516/13/17064216_378214717.shtml

2016-04-26 11:11:45 361

原创 TCP/IP 总结

http://blog.csdn.net/xtzmm1215/article/details/473850791. TCP 为什么要三次握手,而不是两次保证全双工通信。为了保证服务端能接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。TCP连接是一条双向连接,需要

2016-04-25 11:19:54 479 1

原创 二叉树遍历,非递归

1.前序遍历每个节点被访问了两次void preorderTraversal_Recursion(TreeNode *root){ if(!root) return; stack s; while(!s.empty() || root){ while(root){ coutval; s.push(root); root=root->left;

2016-04-14 21:41:11 299

原创 二叉树面试总结

1.二叉树的遍历,递归前序遍历void preorderTraversal(TreeNode *root){ if(!root) return; coutval<<' '; preorderTraversal(root->left); preorderTraversal(root->right);}中序遍历void inorderTravers

2016-04-13 22:29:52 444

空空如也

空空如也

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

TA关注的人

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