进阶之路

首页 新随笔 管理

2014年8月27日 #

摘要: 思想: 动态规划,分析: 12121212: 前面为1 或者 (前面是2 且 当前值 1。 阅读全文
posted @ 2014-08-27 20:49 进阶之路 阅读(158) 评论(0) 推荐(0) 编辑

摘要: 思想:因为 A 很大, 所以从最大值开始插入, 即从 A 的 m+n 位置开始插入数据。避免了冗余的移动。 思想: 1. 由于要 O(1) 时间确定某 key 是不是在 Cache 中,所以用 Hash_map (), 从而能够O(1)找到结点地址,返回对应的 value。 2. 由于要 O(1) 时间插入、删除某项, 所以各项之间的存储不能用单链表(删除时要O(n)查找前面的结点),不能用顺序表(插入、删除都 O(n)), 故存储使用双链表。 综上分析,查找、插入、删除都是 O(1)时间。(代码尚可优化) 阅读全文
posted @ 2014-08-27 20:12 进阶之路 阅读(141) 评论(0) 推荐(0) 编辑

摘要: 思想: 顺序读,取前面的每个子集,把该位置数放后面作为新的子集。 思想: 排序后,按照 1 的方法。但是若前面的数字与本数字相同,则只读取含有前面数字的每个子集,把自身放在后面作为一个新的子集。 阅读全文
posted @ 2014-08-27 19:49 进阶之路 阅读(178) 评论(0) 推荐(0) 编辑

摘要: 思路: f(n) = Σi=1n f(n-i)*f(i-1), 其中 f(0) = f(1) = 1; 利用动归记下之前的 f(2)~f(n-1)即可。 思路:分别以 1~n 为根节点,左右子树根的集合数量相乘,递归,依次得出结果。 阅读全文
posted @ 2014-08-27 19:39 进阶之路 阅读(251) 评论(0) 推荐(0) 编辑

摘要: 思想: 动态规划。 DP[i][j] = (DP[i-1][j] && s1[i-1] == s3[i+j-1]) || (DP[i][j-1] && s2[j-1] == s3[i+j-1]); 其中,i, j 分别为字符串 s1, s2 的当前长度。 方法二: 进一步优化,空间复杂度, O(min(s1.size(), s2.size())); 阅读全文
posted @ 2014-08-27 19:24 进阶之路 阅读(172) 评论(0) 推荐(0) 编辑

摘要: 思想: Morris traversal. Solution 1 : Preorder traversal Solution 2: Inorder traversal. Solution 3: Morris Traversal. 阅读全文
posted @ 2014-08-27 19:16 进阶之路 阅读(168) 评论(0) 推荐(0) 编辑

摘要: 思想: 构造其镜像树。 阅读全文
posted @ 2014-08-27 19:04 进阶之路 阅读(121) 评论(0) 推荐(0) 编辑

摘要: 思路: 使用两个队列(一个可以顺序读,所以用vector模拟),每个队列放一层结点。 题解: 两种方法: 1. 使用栈: O(n) Time, O(n) Space。 2. Morris traversal (构造线索树), O(n) Time, O(1) Space. 阅读全文
posted @ 2014-08-27 18:49 进阶之路 阅读(180) 评论(0) 推荐(0) 编辑

摘要: 思想: 迭代。 说明: 这类问题,要求一个提供根节点,然后另一个序列(中序序列)可依据根节点分出左右子树。 阅读全文
posted @ 2014-08-27 18:09 进阶之路 阅读(200) 评论(0) 推荐(0) 编辑

摘要: 思想: 若递归,传入层号。若迭代,使用队列,在每层结束时,加入一个标记。 思想: 目前用两种方法:1 同上,最后将结果反转一下。 2.先求出最大层数,再层序遍历。(也许还有更好的方法) 阅读全文
posted @ 2014-08-27 18:02 进阶之路 阅读(143) 评论(0) 推荐(0) 编辑

摘要: 思想: 以中间点为根节点,按先序顺序来创建 。 阅读全文
posted @ 2014-08-27 17:11 进阶之路 阅读(106) 评论(0) 推荐(0) 编辑

摘要: 思想:先序遍历。注意的是: 当只有一个孩子结点时,深度是此孩子结点深度加 1 . 思想: 先序遍历。既要返回左右子树判断的结果,又要返回左右子树的深度进行再判断。 所以要么返回一个 pair, 要么函数参数增加一个引用来传递返回值。 阅读全文
posted @ 2014-08-27 17:00 进阶之路 阅读(179) 评论(0) 推荐(0) 编辑

摘要: 思想: 先序遍历。若当前结点为空,返回 false; 不为空,则加上其值,若为叶子结点,则判断一次。 注意: 非路径和, 而是到叶子结点的路径和。例如: {1, 2} 1 返回: false 思路同上: 只是要记下路径。 阅读全文
posted @ 2014-08-27 16:21 进阶之路 阅读(196) 评论(0) 推荐(0) 编辑

摘要: 思想: 如 Hints. 阅读全文
posted @ 2014-08-27 15:54 进阶之路 阅读(126) 评论(0) 推荐(0) 编辑

摘要: 思想:动态规划。 D[i][j] = D[i][j-1] + (T[i-1] == S[j-1] ? D[i-1][j-1] : 0); 改进后:空间复杂度 O(T.size()). 阅读全文
posted @ 2014-08-27 15:29 进阶之路 阅读(180) 评论(0) 推荐(0) 编辑

摘要: 思想: 常量空间要求,决定了不能使用递归。满二叉树,简单循环,每次修改一层即可。 思想同上: 但是下一层最开始结点和连接过程中链表的第一个结点不易确定,所以需要设定两个变量来保存。 阅读全文
posted @ 2014-08-27 15:08 进阶之路 阅读(138) 评论(0) 推荐(0) 编辑

摘要: 思想: 简单动态规划。 阅读全文
posted @ 2014-08-27 14:55 进阶之路 阅读(197) 评论(0) 推荐(0) 编辑

摘要: 注意: 限制条件: 先买后卖(不同天)。 思想: 买了后,1. 若以后价格不变,不买不卖。 1. 更价格低,重新买。2. 价格升高,假定抛售,更新一下利润值。 思想:求出所有非递减序列两端绝对值之和。我贴在 leedcode 的代码和证明: 思想:动态规划。 记录下从各位置(含)开始之前的最大利润和此时开始到最后的最大利润。 阅读全文
posted @ 2014-08-27 14:38 进阶之路 阅读(189) 评论(0) 推荐(0) 编辑

摘要: 思想: 后序遍历。注意路径的连通: 结点不为空时要返回 max( max(leftV, rightV)+rootV, rootV); 阅读全文
posted @ 2014-08-27 12:25 进阶之路 阅读(108) 评论(0) 推荐(0) 编辑

摘要: 思想:简单的从两端来逐个读字符,判断是否相等。(36ms) 阅读全文
posted @ 2014-08-27 01:08 进阶之路 阅读(131) 评论(0) 推荐(0) 编辑