摘要:
0-1背包问题(0-1 knapsack problem)是这样的:一个正在抢劫商店的小偷发现了n个商品,第i个商品价值vi美元,种wi磅,vi和wi都是整数。这个小偷希望拿走价值尽量高的商品,但他的背包最多能容纳W磅重的商品,W是一个整数。他应该拿哪些商品呢?(我们称这个问题为0-1背包问题,因为... 阅读全文
摘要:
题目很简单,就是实现两个很大整数的相加操作,具体描述参见A + B Problem II直接贴一个我写的代码:string bigIntegerAdd(string s1, string s2){ int len1 = s1.size(); int len2 = s2.size(); ... 阅读全文
摘要:
单例模式很好理解,就是只允许创建该类的一个实例。 经典版 构造函数声明为private,则只有Singleton类的代码才能调用构造函数。 利用局部静态变量达到实例只有一个的要求。 局部静态变量的另一个优点是lazy initialization,只有在第一次调用getInstance()时才创建该 阅读全文
摘要:
题目描述:You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stoppi... 阅读全文
摘要:
题目描述:Given a binary tree, return all root-to-leaf paths.For example, given the following binary tree: 1 / \2 3 \ 5All root-to-leaf paths are:... 阅读全文
摘要:
问题: 给定一个已排序的双向链表,向其中插入一个元素。solution:struct ListNode { int val; ListNode *prev; ListNode *next;};int insert(ListNode *head, int value){ Li... 阅读全文
摘要:
工厂模式主要用来封装对象的创建,有3种分类:简单工厂(simple factory)、工厂方法(factory method)、抽象工厂(abstract factory)。简单工厂包括3种组成元素:抽象产品、具体产品、具体工厂(简单工厂),结构图如下:C++实现://抽象产品class Car... 阅读全文
摘要:
装饰者模式: 能够动态地往一个类中添加新的行为。相比继承是在编译时添加行为,装饰模式是在运行时添加行为。星巴克咖啡是讲述装饰者模式的一个很好的例子。 假设现在有两种咖啡:HouseBlend、DarkRoast,同时有两种调料:Milk、Mocha。那么此时我们可以给顾客提供以下咖啡:House... 阅读全文
摘要:
观察者模式: 定义了subject和observer之间的一对多依赖,当subject状态改变时,所有的observer都会收到通知。结构图:C++实现:class Observer;class Subject {public: virtual void attach(Observer *o... 阅读全文
摘要:
策略模式: 定义了一个算法族,分别把每个算法封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。结构图:C++实现:class calculateStrategy {public: virtual int calculate(int value1, int value2... 阅读全文