Pistachio's Blog

Later equals never.

组合数&排列数

1、求组合数:外层for循环物品,内存for循环背包。 组合数{1,3}与{3,1}属于同一种组合 1234567for(int coin : coins) { for(int i = 0; i <= amount; i++) { if(i >= coin) { dp[i] += dp[i - coin]; } &......

【结构型】代理模式

一、定义为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。 可能由于性能、安全控制、分布式等原因,不能直接访问某个对象,因此需要加一层代理。 二、结构 三、使用场景Proxy的设计有时候需要手动写代码,大部分情况可以用工具自动生成。 分布式系统proxy的应用非常广泛。 123456789101112131415161718192021222324252627class ......

字符串和位运算的应用

判断字符串是否由相同字符组成,可以结合位运算来计算,提升效率。 一、原理1、对字符串每个单词进行位运算 12345// word1 = "abdeg" int bitmask1 = 0; bitmask = 0; for(char c : word1) { mask1 |= 1 << (c - 'a'); }......

【创建型】外观模式

一、定义为子系统中的一组接口(不稳定)提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。 二、结构 体现了一种设计原则和思想的表达,子系统内部和外部的解耦。红色部分是稳定的,蓝色部分是不稳定的数据 三、总结 Facade模式更注重从架构的层次去看整个系统(多个类形成系统级别的设计),而不是单个类的层次。Facade更多是一种架......

【结构型】享元模式

一、定义运用共享技术有效地支持 大量细粒度对象 (如字符串、线程池)。 模式动机:软件系统采用纯粹对象方案的问题在于,大量细粒度对象会很快充斥在系统,从而带来很高的运行代价。(主要指内存需求方面的代价) 二、结构 基本思想(共享): 在共享池中查找对象是否创建过,如果对象创建过,则直接返回对象;否则先创建对象,把该对象放到共享池中。不过有些对象不支持恭共享。 三、使用场景123456789......

【创建型】单例模式

一、定义保证一个类仅有一个实例,并提供一个该实例的全局访问点。 二、结构 三、创建方式12345678class Singleton {private: Singleton(); // 使其私有化,只能自己使用,别人不能使用,故放在private Singleton(const Singleton& other);public: static Sin......

差分数组

一、区间和检索(数组不可变)1、先求数组的前缀和presum; 2、再求区间presum[right - 1] - presume[left]的值 LC303. 区域和检索 - 数组不可变 给定一个整数数组 nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= right 实......

【创建型】工厂模式

一、动机面向接口编程 实例化时不要写具体的类 1ISplitter * splitter = new FileSpliter(); // 不推荐:FileSpliter * splitter = new FileSpliter(); 但C++或者其它语言不支持抽象基类上创建对象,不管在栈上声明对象或在堆上new对象,都不可以 1ISplitter sp; // 不可取 二、定义定义一......

【结构型】桥接模式

一、定义将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。 二、结构 三、总结 Bridge模式使用“对象间的组合关系”(抽象的指针),解耦了抽象与实现之间固有的绑定关系,使得抽象和实现之间可以沿着各自的维度变化(子类化)。 Bridge模式的应用一般在“两个非常强的变化维度”,有时一个类也有多于两个的变化维度,这时可以使用Bridge的扩展模式。 编译时装配转为 ......

设计模式总览

八大面向对象设计原则 如果模式违背了设计原则,则这个模式是错误的。 一、依赖倒置原则(DIP) 高层模块(稳定)不应该依赖底层模块(变化),二者都该依赖抽象(稳定)。 抽象(稳定)不应该依赖实现细节,实现细节(变化)应该依赖抽象(稳定)。 例如A依赖B,就是A在编译时B需要存在,才能编译通过(此处的依赖通常是指编译时依赖,只有抽象在才能编译通过)。 (Before) (After) ......