这道题我感觉是LintCode里面Topological Sorting里最难Pass的,虽然思路不难,但是很多测试用例过不了。 思路:基于topological sorting。每次都要确定queue.size()是1, 并且还要判断是不是跟给出的org数组一样。否则返回false。 代码如下: class Solution { public: /** * @param org: a permutation of the integers from 1 to n * @param seqs: a list of …

2018年6月1日 0条评论 0点热度 阅读全文

一、问题描述 求两个字符序列的公共最长子序列。例如字符序列abcbdb和字符序列acbbabdbb的最长公共子序列为acbdb。 二、问题分析 (1)用L[i][j]表示子序列xi和yj的最长公共子序列的长度,动态规划函数为 L[i][j] = L[i - 1][j - 1] + 1,   xi等于yj          = max(L[i][j - 1], L[i - 1][j]),     xi不等于yj 边界条…

2016年3月24日 0条评论 0点热度 阅读全文

一、问题描述 在数字序列A中,按下标递增的顺序选出一个子序列B,如果选出的子序列B是严格递增的,则该子序列B称为原数字序列A的递增子序列。最长递增子序列问题就是找到原数字序列A中最长的递增子序列。例如数字序列5,2,8,6,3,6,9,7的一个最长递增子序列为2,3,6,9。 二、问题分析 动态规划函数为 L(i) = 1,                         i = 1或者不存在A[…

2016年3月22日 0条评论 0点热度 阅读全文

一、问题描述 从数塔顶层出发,每个结点可以选择向左走或向右走,要求一直走到塔底,使得走过的路径上的数值和最大。 如上图所示的数塔,最大路径和为86,经过的路径从塔顶到塔底为13,8,26,15,24。 二、问题分析 动态规划函数为: resultTower[i][j] = tower[i][j] + Math.max(tower[i + 1][j],tower[i + 1][j + 1]); 边界值resultTower[heigh - 1][j] = tower[heigh - 1][j]; 三、算法代码 pub…

2016年3月21日 0条评论 0点热度 阅读全文

一、问题描述 把一个真分数表示成最少的埃及分数之和。 埃及分数即分子为1的分数。 二、问题分析 1、贪心算法的思想在本问题中的体现为在每一步的分解中都寻找最大的埃及分数。 2、具体步骤如下 步骤一 假设真分数N/M的分子为N,分母为M,则有下式成立 M = K * N + Z,其中Z必小于N 两边同时除以分子N后,可知 M/N = K + Z/N < K + 1 所以,必有下式成立 N/M > 1/K+1 所以,小于真分数N/M的最大埃及分数为1/K+1。 步骤二 下一步再寻找N/M - 1/K+1的最…

2016年3月19日 0条评论 0点热度 阅读全文

一、问题描述 把一个真分数表示成最少的埃及分数之和。 埃及分数即分子为1的分数。 二、问题分析 1、贪心算法的思想在本问题中的体现为在每一步的分解中都寻找最大的埃及分数。 2、具体步骤如下 步骤一 假设真分数N/M的分子为N,分母为M,则有下式成立 M = K * N + Z,其中Z必小于N 两边同时除以分子N后,可知 M/N = K + Z/N < K + 1 所以,必有下式成立 N/M > 1/K+1 所以,小于真分数N/M的最大埃及分数为1/K+1。 步骤二 下一步再寻找N/M - 1/K+1的最…

2016年3月19日 0条评论 0点热度 阅读全文