摘要:题目描述: 最长不重复子串(Longest No Repeat String,LNRS)就是从一个字符串中找到一个连续子串,该子串中任何两个字符都不能相同,且该子串的长度是最大的。分析:解法一:动态规划 动态规划就是用来解决这种最优化问题,关于字符串的很多有趣的问题如最长公共自序列,最长上升子序列等都可以用动态规划来解,这道题我的第一想法也是动态规划。 动态规划的核心在于寻找最优子结构,对于一个字符,如果他与他前面的最长不重复子串都没有相同的字符,那么他也可以加入这个子串中,构成一个新的子串。即对于字符数组a[],dp[i]表示以a[i]为结尾的最长不重复子串长度,dp[0] = 1,... 阅读全文
[创新工场2014] 2014创新工场校园招聘笔试题
2013-09-26 16:42 by 庸男勿扰, 1851 阅读, 1 推荐, 收藏, 编辑
摘要:继上一篇博文《[创新工厂2014]回文修复》后,继续推出第二道创新工厂的笔试算法题~ 对于非负数列a1、a2、......、an,在数轴上做垂线连接点(i,0)和(i,ai)。选择这样的两条线和x轴可以形成一个容器,我们以面积代表所装的水,求以这种方式构成的容器能装的最大面积。比如选择a2=3、a5=6,则所装的面积为9。分析: 这道题实际上的意思是:对于一个给定的序列,求abs(i-j)*min(a[i],a[j])的最大值! 先对序列按照高度排序,然后按照排序后的顺序进行枚举,枚举过的就做标记,表示已经访问过了,保证了当前的节点,是序列里的最小高度的板,那么以这个板为边界能装的最... 阅读全文
[创新工场2014] 回文修复
2013-09-26 11:10 by 庸男勿扰, 1040 阅读, 0 推荐, 收藏, 编辑
摘要:新鲜出炉~,创新工厂2013-9-25晚在交大的现场笔试题~1、回文修复 所谓回文,就是正序和倒序遍历结果一样的字符串,比如“aba”,“abcdedcba”。实现一个方法pal(),输入一个字符串,打印出以这个字符串为前缀的一个回文。比如输入“abc”,pal()方法打印出“abcdcba”或“abcba”;输入“abcb”,可以输出“abcbcba”或“abcba”。如果可能,输出尽量短的结果。以Java语言为例: void pal(String in);语言任选。分析: 这道题说白了就是求以给定字符串为前缀的最短回文串。首先我们要明确的是,假设字符串的长度为len,那么最短长度... 阅读全文
[九度OJ]1137.浮点数加法
2013-09-20 11:02 by 庸男勿扰, 514 阅读, 0 推荐, 收藏, 编辑
摘要:原题链接:http://ac.jobdu.com/problem.php?pid=1137题目描述:求2个浮点数相加的和题目中输入输出中出现浮点数都有如下的形式:P1P2...Pi.Q1Q2...Qj对于整数部分,P1P2...Pi是一个非负整数对于小数部分,Qj不等于0输入:对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。每组测试数据之间有一个空行,每行数据不超过100个字符输出:每组案例是n行,每组测试数据有一行输出是相应的和。输出保证一定是一个小数部分不为0的浮点数样例输入:20.1111111111111111111111111111110.11111111 阅读全文
[九度OJ]1078.二叉树的遍历(重建)
2013-09-14 11:47 by 庸男勿扰, 310 阅读, 0 推荐, 收藏, 编辑
摘要:原题链接:http://ac.jobdu.com/problem.php?pid=1078题目描述:二叉树的前序、中序、后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。输入:两个字符串,其长度n均小于等于26。第一行为前序遍历,第二行为中序遍历。二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。输出:输入样 阅读全文
[数字技巧]最大连续子序列和
2013-09-09 12:48 by 庸男勿扰, 384 阅读, 0 推荐, 收藏, 编辑
摘要:最大连续子序列和这个问题是一个比较常见的问题,出现在很多公司的面试笔试中。题目大概是这样描述的: 输入一个整形数组,数组中有正数也有负数,数组中连续一个或多个组成一个子序列,每个子序列都有一个和,求所有子序列的和的最大值。 一、暴力枚举 最暴力的解法是枚举起点和终点(或长度),连同求和的那个步骤,共三个for循环,复杂度是O(n3)。代码示例如下: 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 int n; 8 int arr[1001]; 9 long maxRes;10 int start;1... 阅读全文
[九度OJ]1011.最大连续子序列
2013-09-07 21:25 by 庸男勿扰, 349 阅读, 0 推荐, 收藏, 编辑
摘要:原题链接:http://ac.jobdu.com/problem.php?pid=1011题目描述: 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 2 #include 3 4 int arr[10001]; 5 typedef struct Result{ 6 int max; 7 int begin; 8 int end; 9 }Result;10 11 bool isNeg(int a[],int size){12 for(int ... 阅读全文
[九度OJ]1113.二叉树(求完全二叉树任意结点所在子树的结点数)
2013-09-07 01:26 by 庸男勿扰, 768 阅读, 1 推荐, 收藏, 编辑
摘要:原题链接:http://ac.jobdu.com/problem.php?pid=1113题目描述: 如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。 比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。输入: 输入数据包括多行,每行给出一组测试数据,包括两个整数m,n (1 2 3 int nodeNum_rec(int m,int n) 4 { 5 if(m>n)... 阅读全文
[九度OJ]1431.Sort(寻找前m大数并排序)
2013-09-05 20:49 by 庸男勿扰, 791 阅读, 0 推荐, 收藏, 编辑
摘要:原题链接:http://ac.jobdu.com/problem.php?pid=1431题目描述:给你n个整数,请按从大到小的顺序输出其中前m大的数。输入:每组测试数据有两行,第一行有两个数n,m(0 2 #include 3 #include 4 using namespace std; 5 6 int n,m; 7 int arr[1000001]; 8 int heap[1000001]; 9 10 bool cmp(int a,int b)11 {12 if(a>b)13 return true;14 else15 return ... 阅读全文
[九度OJ]1008.最短路径问题
2013-09-04 19:44 by 庸男勿扰, 346 阅读, 0 推荐, 收藏, 编辑
摘要:原题链接:http://ac.jobdu.com/problem.php?pid=1008题目描述:给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。输入:输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点t。n和m为0时输入结束。(1 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 ... 阅读全文