2012年7月13日

两道面试题

摘要: 题目1:要求从N个元素中随机的抽取k个元素,其中N无法确定。很大,只能遍历一次。题目2:数组A【1...N], 创建一个新的数组,B【1...N], 时间复杂度O(N),使得B【i] = A[1] *...*A[N] / A[i],不能用除法题目1算法是蓄水池算法,奇妙。题目2算法是正向遍历一次,反向遍历一次View Code p[0] = 1;q[N+1] = 1;for( int i = 1; i <= N; i++) p[i] = p[i-1] * A[i];for( int i = N; i >= 1; i--) q[i] = q[i+1] * A[i];p[i] = A[ 阅读全文

posted @ 2012-07-13 17:57 more think, more gains 阅读(146) 评论(0) 推荐(0) 编辑

poj 1094 拓扑排序

摘要: 悲剧,这题错得好惨,首先这题题意就没仔细看清,误读题意。读懂题意后又悲剧了,当不确定时还要判断是否有回路。判断回路时又用了错误算法,思考不认真,当然知道可以用Floyd传递闭包判断就是没用。自以为题目不会那么麻烦,直接判断入度就可以了。自己得想法真的太二。怎么可以用判断入度就可以判断有无回路呢?正确算法:1.边输入边(A《B)就要边处理。先判断是否有冲突,然后判断是否不确定。确定冲突或答案后只要把后面得数据读进来就可以,不用处理。2.拓扑排序算法3.Floyd判断是否有回路View Code #include<stdio.h>#include<stdlib.h>#inc 阅读全文

posted @ 2012-07-13 11:54 more think, more gains 阅读(251) 评论(0) 推荐(0) 编辑

导航