自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 归并排序(分治算法)

之前分享过一道算法叫做:寻找一个序列中的最大子序列和,如果那个算法想通了,那么归并排序开起来会显得比较简单 归并算法基本思路 将待排序序列R[0…n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此反复进行下去,最后得到一个长度为n的有序序列。综上可知:归并排序其实要做两件事:(1)“分解”——将

2017-10-31 08:55:58 3821

原创 策略模式(行为类模式)

结构图 案例; 定义一组算法,将每个算法都封装起来,并使他们之间可以互换。 实现:class Strategy{public: virtual void crypt() = 0; virtual ~Strategy(){}};class AES :public Strategy{public: virtual void crypt(){ co

2017-10-25 22:33:26 258

原创 桥接模式(构造型设计模式)

概念 Bridge模式又叫做桥接模式,是构造型的设计模式之一,Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任,他的主要特点是保持各个部分的独立性以及对他们的拓展功能。 结构图 需求 现有发动机Engine4400c,Engine4500c,车BMW5 ,BMW5 ,通过桥接实现车和发动机的任意组合。class Engine{publi

2017-10-25 22:24:05 297

原创 组合模式(结构型设计模式)

结构图 单个对象和组合对象的使用具有一致性,将对象组合成树状结构以表示“整体—部分” 文件和文件夹的案例: 实现class IFile{protected: string name;public: virtual void display() = 0; virtual ~IFile(){}};class File :public IFile{public

2017-10-25 22:14:50 252

原创 模板模式(行为型模式)

结构图 类中的方法通过虚化的方式,使得在客户端无法访问,只能通过另一个可以访问的函数,通过this进行调用。 实现class Base{protected: virtual void primitive1() = 0; virtual void primitive2() = 0;public: void template1(){ this->pri

2017-10-25 22:08:14 198

原创 访问者模式(行为模式)

概念 分离对象的数据和行为,使用访客模式,可以不修改类的情况下,增加操作角色和职责。 结构图 优点: 1.访问者模式使得增加新的操作变得很容易,如果一些操作依赖于一个复杂的结构对象的话,那么一般而言操作会变得很复杂,而使用访问者模式,增加新的操作意味着增加一个新的访问者类,因此变得很容易。 2.访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个节点类中。 3.访问者模式可以

2017-10-25 11:13:41 305

原创 二叉树的下一个节点

题目 给定一棵二叉树中的一个节点,如何找出中序遍历列的下一个节点?(树中除了有左右节点的指针还有一个指向父节点的指针) 上图的二叉树中序遍历序列为; [d,b,h,e,i,a,f,c,g] 观察二叉树的结构可知; 如果给定的节点有右子树,那么他的下一个节点是他的右子树的最左子节点 如果给定的节点没有右子树,如果他的节点是他父节点的左节点,那么他的下一个节点就是他的父节点 如果该给定的节

2017-10-21 14:27:04 166

原创 责任链

Chain of Responsibility 模式也叫责任链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来完成同一个任务,这些类的对象之间像链条一样紧密相连,所以被称作职责链模式。 结构图 具体应用 软件窗口的消息传递。 servlet容器的过滤器(Fliter)框架实现 eg: 现需要造车,造车分为三部分:早车头,造车身,造车尾。利用职责连实

2017-10-21 14:06:32 249

原创 快速排序(分治算法)

步骤 1.每次将序列中的第一个元素作为一个一个基准, 2.在序列的左边找到第一个比基准元素大的值,在序列的右面找到第一个比序列小的值,交换这两个值,使得在这两个值的两边元素分别小于、大于基准元素。继续在序列中寻找,之后再交换,最终实现在某个位置,该元素的值(包括该元素)都比基准元素小,该元素的右面的元素值都比基准元素大。将这个值和基准元素进行交换,实现在基准元素的左边,元素值都比基准元素小,基准

2017-10-20 13:24:01 1304

原创 代理模式(结构型设计模式)

Proxy模式又叫做代理模式,是结构型的设计模式之一,他可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。 所谓代理,是指具有与代理元(被访问的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类进行交互,而代理一般在交互模式过程中(交互前后),进行某些特别的处理。 结构图: eg: 现有一个红酒厂,需要代理卖红酒,客户端通过代理,得到红酒。 实现:class B

2017-10-13 13:39:14 271

原创 idea常用快捷键

IntelliJ Idea 常用快捷键列表Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关闭文件 Ctrl+[ OR ],可以跑到大括号的开头与结尾 Ctrl+F12,可以显示当前文件的结构 Ctrl+F7,可以查询当前元素在当前文件中的引用,然

2017-10-09 21:43:27 155

原创 二叉树对称问题

1.镜像二叉树: 如图: 需求:编写一个函数,传入一棵二叉树,将该二叉树变成他的镜像。 交换过程: 总结上面的过程:先前序遍历二叉树,如果是叶子节点,则两个兄弟节点就进行交换 。 实现:void mirrorRecurisively(BTNode *root){ if (!root){ return; } else{ BTNo

2017-10-09 20:50:31 561 1

原创 求序列中最大子序列和(分治算法)

分治算法 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。 分治思想 当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成

2017-10-09 10:28:40 9679

原创 适配器模式(结构型设计模式)

概念 通过适配器模式可以改变已有类的接口。 适配器的意义 那不同接口调用转换成相同接口的调用,并实现了代码的复用 结构图: 需求: 现有一个家用电器需要使用18V的电源,但是只有220V的电源,通过适配器完成家用电器的使用。 代码实现:class Current18V{public: virtual void useCurrent18V() = 0;};class C

2017-10-06 22:35:41 482

原创 工厂模式

1.简单工厂模式:(简单工厂模式不属于23种设计模式) 结构图: 优点:统一接口 缺点:违背了“开闭原则” 代码实现: 生产类:class Product{public: virtual void getName() = 0;};class ProductA:public Product{public: void getName(){ cout

2017-10-06 21:22:55 375

原创 单例模式

单例模式是一种对象创建模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。 类图 为什么使用单例模式? 在应用开发中,常常有如下需求: *在多线程之间只初始化一个资源。 *在整个程序空间中使用全局变量共享资源。 *在大规模系统中,为了性能考虑,以及需要节省兑现的创建时间等等。 懒汉式class Singelton{priv

2017-10-05 22:04:17 158

原创 设计模式相关基础知识

设计模式的最终目的:高内聚,低耦合 设计模式的原则: 1)开放封闭原则: 类的改变是通过增加代码进行的,而不是修改代码 案例展示: 2)单一的职责原则: 类的职责要单一,只对外提供一种功能,而引起类变化的原因都应该只有一个 3)依赖倒置原则: 依赖于(抽象)接口,不要依赖具体的实现(类),也就是针对接口编

2017-10-05 20:53:01 283

原创 马踏棋盘(回溯算法)

马可以走的位置如图: 要求: 找到所有马从任意一个位置出发遍历整个棋盘的一条路径 算法实现:#include<stdlib.h>#include<stdio.h>int chessboard[12][12];//定义棋盘,//马走的方向int move[8][2] = { { 2, 1 }, { 1, 2 }, { -1, 2 }, { -2, 1 }, { -2, -1 }, { -1

2017-10-05 13:40:52 2278

原创 迷宫(回溯算法)

要想解决迷宫问题,首先搞明白八皇后,迷宫问题是回溯和贪心的产物。 题目:现有一个迷宫如图: 黄色五角星为迷宫的起点,红色五角星为迷宫的终点。 要求:找到从起点到终点的所有路线。 思路:我们的目的为了到达终点,所以一定要向着终点的方向出发。 因为迷宫的终点在起点的右下角。 所以我们选择路径时先考虑向下走, 走不通考虑向右走, 走不通考虑向上, 最后考虑向左。 这样就会总有一次到

2017-10-05 13:29:43 2729

空空如也

空空如也

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

TA关注的人

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