返回信息流一篇文章有n(10<n<100)个段落,现在已经知道第i个段落有number[i]个单词。请设计一个算法(代码实现,不得调用库函数),求出第m个单词属于第几个段落,查询共有k(k>10000)次,并说明时间复杂度。
ps:用java语言
这是一条镜像帖。来源:北邮人论坛 / java / #20075同步于 2011/9/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
求解创新工场的编程笔试题
ArvinW
2011/9/16镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
List<Integer> wordToPara = new ArrayList<Integer>();
int p = 0;
for(int i=0;i<n;i++) {
for(int j=0;j<number[i];j++) {
wordToPara[p] = i;
p++;
}
}
int whichWord = scanner.nextInt();
System.out.println(wordToPara.get(whichWord));
预处理:时间复杂度:单词总个数
查询:时间复杂度:O(1)
空间复杂度:单词总个数。
预处理:记录每个段落结束的单词个数.
对于每次查询,二分法与预处理结果进行比较
时间复杂度O(logn)
空间复杂度(n)
1楼的做法适合k比较大,number[i]较小.
【 在 Adun 的大作中提到: 】
: 预处理:记录每个段落结束的单词个数.
: 对于每次查询,二分法与预处理结果进行比较
: 时间复杂度O(logn)
: ...................
题目都强调了k>10000 显然是1楼做法比较好嘛