摘要: 原题地址将L中的单词看成一个整体,这道题与Minimun Window String比较类似,都是利用滑动窗口搜索。所以,依次枚举所有S的起始位置i,从i处开始搜索。当然并不需要枚举所有的i,i最多等于L中单词长度-1。比如L中的单词长度为3,那么当枚举过i=0,1,2后,不用再尝试i=3了,因为结... 阅读全文
posted @ 2015-01-22 18:23 李舜阳 阅读(909) 评论(0) 推荐(0)
摘要: 原题地址用两个指针分别记录窗口的左右边界,移动指针时忽略那些出现在S种但是没有出现在T中的字符1. 扩展窗口。向右移动右指针,当窗口内的字符即将多于T内的字符时,停止右移2. 收缩窗口。向右调整左指针,当窗口内的字符即将少于T内的字符时,停止右移3. 统计结果。如果窗口内的字符包含了T内的所有字符,... 阅读全文
posted @ 2015-01-22 15:11 李舜阳 阅读(587) 评论(0) 推荐(0)
摘要: 原题地址两个字符串满足什么条件才称得上是scramble的呢?如果s1和s2的长度等于1,显然只有s1=s2时才是scramble关系。如果s1和s2的长度大于1,那么就对s1和s2进行分割,划分成两个子问题分别处理。如何分割呢?当然不能任意分割。假设分割后s1变成了s11和s12,s2变成了s21... 阅读全文
posted @ 2015-01-22 12:09 李舜阳 阅读(351) 评论(0) 推荐(0)
摘要: 原题地址分两步:1. 试探。看是否还有k个节点可以翻转2. 翻转。[]->[]->[]->[1]->[2]->[3]->[4]->[]->[]->[]->NULL |------------------| 假设要翻转这一段翻转前: ... 阅读全文
posted @ 2015-01-21 19:57 李舜阳 阅读(170) 评论(0) 推荐(0)
摘要: 原题地址转化为二维地图游走问题。比如s1="abab",s2="aab",s3="aabaabb",则有如下地图,其中"^"表示开始位置,"$"表示终止位置。 a a b a ^ . . b . . . a . . . b .... 阅读全文
posted @ 2015-01-21 16:31 李舜阳 阅读(204) 评论(0) 推荐(0)
摘要: 原题地址中序遍历二叉搜索树,正常情况下所有元素都应该按递增排列,如果有元素被交换,则会出现前面元素大于后面的情况,称作反序。由于交换了两个节点,所以通常会有两处反序,但如果是两个相邻节点发生了交换,则只会有一次反序。注意,如果有两次反序,前面那次一定是较大数,后面那次一定是较小数交换的时候注意只需要... 阅读全文
posted @ 2015-01-21 15:24 李舜阳 阅读(177) 评论(0) 推荐(0)
摘要: 原题地址转化为求非重路径数问题,用动态规划求解,这种方法还挺常见的举个例子,S="aabb",T="ab"。构造如下地图("."表示空位,"^"表示起点,"$"表示终点),我们的目标就是求从起点到终点一共有多少条路径。 a ba ^ .a . .b . .b . $ 对于任意一个位... 阅读全文
posted @ 2015-01-21 14:47 李舜阳 阅读(123) 评论(0) 推荐(0)
摘要: 原题地址二叉树的层次遍历。对于每一层,依次把各节点连起来即可。代码: 1 void connect(TreeLinkNode *root) { 2 if (!root) return; 3 4 queue parents; 5 6 parents.push(root); 7 wh... 阅读全文
posted @ 2015-01-21 14:03 李舜阳 阅读(334) 评论(0) 推荐(0)
摘要: 原题地址最直观的想法就是划分成两个子问题,每个子问题变成了:求在某个范围内交易一次的最大利润在只能交易一次的情况下,如何求一段时间内的最大利润?其实就是找股价最低的一天买进,然后在股价最高的一天卖出,当然,卖股票要在买股票之后。用迭代法求这个问题非常容易,令profits[i]表示截至到第i天的最大... 阅读全文
posted @ 2015-01-21 13:08 李舜阳 阅读(889) 评论(0) 推荐(0)
摘要: 原题地址假设我们找到了一个最优路径,那么该路径上一定存在一个节点,左边的路径是它的左儿子,右边的路径是它的右儿子。所以,只需要在遍历二叉树求路径的同时更新最大值即可。maxPath = max{只保留左边路径,只保留右边路径,同时保留左右两边路径,左右两边路径都不保留(只有节点本身)},对应第8行无... 阅读全文
posted @ 2015-01-21 12:00 李舜阳 阅读(379) 评论(0) 推荐(0)