2014年4月10日

[LeetCode系列]Evaluate Reverse Polish Notation

摘要: Evaluate Reverse Polish NotationValid operators are+,-,*,/. Each operand may be an integer or another expression.Some examples: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", " 阅读全文

posted @ 2014-04-10 16:56 Jam_01 阅读(146) 评论(0) 推荐(0) 编辑

2014年4月2日

10分钟一个设计模式系列-The Decorator Pattern

摘要: 10分钟一个设计模式系列The Decorator Pattern1.Basic 基础为何称这个模式为Decorator模式呢。我们先来看一个例子,一家咖啡店,有很多种类型的饮品,如DarkRoast, HouseBlend, Espresso等等。不同类型的饮品,还能加入不同的调料,例如牛奶,Mo... 阅读全文

posted @ 2014-04-02 23:06 Jam_01 阅读(304) 评论(0) 推荐(0) 编辑

2014年3月30日

10分钟一个设计模式系列-The Observer Pattern

摘要: 10分钟一个设计模式系列The Observer Pattern1. 基础 Basic Observer Pattern,说穿了,类似于手机应用里面的“发布-订阅”的形式,有一个Subject接口提供内容的获取,更新,并且Subject需要注册(register)很多个Observer观察者,而具有显示数据功能Display的类将继承Observer接口作为观察者,只有当你在Subject里注册了这个Observer时,Subject一有数据更新就会通知(notify)所有注册的Observers去更新(update)内容。现在我们来看看一个UML图,摘自《Head First Design. 阅读全文

posted @ 2014-03-30 10:40 Jam_01 阅读(344) 评论(0) 推荐(0) 编辑

2014年3月29日

[LeetCode系列]Populating Next Right Pointers in Each Node II

摘要: 将会陆续放出本人刷LeetCode所见到的一些比较有趣或者不会的题目的随笔。Note:You may only use constant extra space.For example,Given the following binary tree, 1 / \ 2 3 / \ \ 4 5 7After calling your function, the tree should look like: 1 -> NULL / \ 2 -> 3 -> NULL / \ ... 阅读全文

posted @ 2014-03-29 22:33 Jam_01 阅读(516) 评论(0) 推荐(0) 编辑

2014年1月22日

动态规划Dynamic Programming: Rod-Cutting Problem

摘要: 动态规划可求最优解问题,但有条件限制,每一层最优解可知。递归动态规划与分治思想有类似之处,但在递归基础上,用一张表存储计算过程中每一层的”最优解“,避免重复计算已经得出的计算结果。Rod-Cutting Problem问题描述:给你一根长n英尺的棒子和一份关于该棒子的价目表如下(其中i = 1,2,3,…,n),请问如何将这根棒子卖出最高的价格,可以对棒子进行切割。thinking path:从i=1 to 10进行枚举尝试,例如,砍1米开始砍,那么剩下的9米就会成为新的”问题“,进行递归。易得递推式:r(i)=max(p[i]+r(n-i)); n为rod总长根据递推式,写出递归伪代码:CU 阅读全文

posted @ 2014-01-22 17:08 Jam_01 阅读(1081) 评论(0) 推荐(0) 编辑

递归详解,全排列问题

摘要: 递归 Recursion关键词: 递归树(recursion tree)全排列问题问题描述:用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列,如 abc 的全排列: abc, acb, bca, dac, cab, cbathinking path:进行全排列,对每种可能进行枚举,例如123,那么可以1与2互换,1与3互换,以及2与3互换。问题稍微扩展为1234,1分别与2,3,4互换。总结规律就是对某个数,与其后面的数一一进行互换,得出该数在该位置的所有可能。将该数向后“递进”一个位置,例如,1234,1与2互换后为,2134,再用同样的方法尝试 阅读全文

posted @ 2014-01-22 16:34 Jam_01 阅读(2292) 评论(0) 推荐(0) 编辑

2013年3月31日

图,深度,广度优先遍历(三)

摘要: 广度优先搜索树BFS算法(队列实现):同深度优先搜索,需要一个ArrayList searchOrders存放路径;一个int[]数组parent存放父亲节点;一个boolean[]数组isVisited标记节点是否被访问过;另外,不同于深度优先搜索,前文中深度优先搜索是以递归形式来实现(其实用栈亦可以实现),广度优先搜索用队列实现,所以需要一个链表LinkedList queue存放处理节点的优先顺序;step1 将起始节点v放入队列,queue.offer(v),并且isVisited[v] = true;step2 队列不为空的情况下,循环: 队首节点u出列 int u = queue. 阅读全文

posted @ 2013-03-31 10:42 Jam_01 阅读(257) 评论(0) 推荐(0) 编辑

图,深度,广度优先遍历(二)

摘要: 深度优先搜索树DFS算法:step1 选取图中的一个点(Vertex) v,将与该点v相邻的其余所有点存放至neighbours.get(v)中。 isVisited数组用来判断该点是否已遍历,isVisited[v] = true; step2 递归方法 dfs(v,parent,serachOrders); parent为int[]数组,parent[i]表示i点的父亲节点。 searchOrders为一个ArrayList数组,为遍历路径。 每次递归开始,searchOrders.add(v),isVisited[v] = true; 将v所有相邻节点i进行判断,若未被访问过,即!isV 阅读全文

posted @ 2013-03-31 09:59 Jam_01 阅读(236) 评论(0) 推荐(0) 编辑

2013年3月30日

图,深度,广度优先遍历(一)

摘要: What is graph? 图可以这样定义。 G=(V,E)V:图中所有顶点Vertex的集合Vertices;E:图中边的集合;例子:边肯定连着两个顶点,那么一条边可以如此表示{v1,v2}。可以用二维数组表示int[][].或者定义一个Edge类public class Edge { int u; //starting vertex; int v; //ending vertex; public Edge(int u,int v) { this.u = u; this.v = v;}}边的集合就是java.util.ArrayList edges = new java.util.... 阅读全文

posted @ 2013-03-30 23:53 Jam_01 阅读(267) 评论(0) 推荐(0) 编辑

2013年3月25日

java实现快速排序

摘要: 算法:方法partition(int[] list,int first,int last)每次分割前确定一个中心位置pivot。大于pivot的放到pivot右边,小于pivot的放到pivot左边。一直分割到所有pivot处理完毕。public class QuickSortDemo { public QuickSortDemo() {} public static void main(String[] args) { int[] intList = {2,3,2,5,6,1,-2,3,14,12}; quickSort(intList,0,intList.length-1); ... 阅读全文

posted @ 2013-03-25 23:01 Jam_01 阅读(238) 评论(0) 推荐(0) 编辑

导航