由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问一道面试题
相关主题
问个面试题分享一道面试题
找第K个最小的元素Amazon 面试题
问个题目,找不在区间内的所有数find median for k sorted arrays
问一道google面试题(from careercup)merge k个数组怎样的方法好?
刚看到的一道google面试题divide array into two, sum of difference is min in O(N)
问几道算法题a[i] + b[j] = c[k] 的题有靠谱的答案不?
一个有关数组的面试题 (难度较高)请教一道题
问道fackbook面试题请问可以用二分法判断一个数组是否sorted吗?
相关话题的讨论汇总
话题: 位置话题: 三个话题: array话题: begin话题: end
进入JobHunting版参与讨论
1 (共1页)
r***u
发帖数: 83
1
现在搜索三个词,比如“hello”,"world",
"goodbye", 搜索完成之后会有三个array,每一个array都存放着三个词在一篇文章里
的位置。写一个函数,返回两个值,代表文章中的两个位置,在这两个位置之间,“
hello”,"world", "goodbye"至少各出现一次,而且要求这两个位置之间的距离尽可能
短。
我记得以前在版上看到有讨论这道题,可是我现在找不到了。
c**y
发帖数: 172
2
Is this useful?
http://www.stevekrenzel.com/articles/blurbs

【在 r***u 的大作中提到】
: 现在搜索三个词,比如“hello”,"world",
: "goodbye", 搜索完成之后会有三个array,每一个array都存放着三个词在一篇文章里
: 的位置。写一个函数,返回两个值,代表文章中的两个位置,在这两个位置之间,“
: hello”,"world", "goodbye"至少各出现一次,而且要求这两个位置之间的距离尽可能
: 短。
: 我记得以前在版上看到有讨论这道题,可是我现在找不到了。

r***u
发帖数: 83
3
万分感谢!

【在 c**y 的大作中提到】
: Is this useful?
: http://www.stevekrenzel.com/articles/blurbs

p*u
发帖数: 136
4
我想到一个方法是这样的:
1,三个数组A,B,C分别保存3个单词的位置,假设是数组是升序的。
2,将三个数组合并为一个数组Z = A + B + C,合并后的数组Z也是升序的,然后在每
一个位置记录一下,这个位置是从A,或者B,还是C得来的。这个是线性的时间复杂度。
3,由于要求是3个单词至少出现一次。所以可以设计这样一个算法:
有两个指针begin和end,并记录begin和end这个区间内3个单词分别出现的次数。
最开始begin和end都指向Z的开端。然后end开始往后扫:当发现begin到end区间内
所有单词的次数都大于等于1的时候,找到了一个候选解。当发现把begin指针所在的单
词去掉之后,区间内这个单词的个数不会为0,则把begin指针向前移。
所有候选解中距离最短的一个,就是最后要找的解。
由于begin和end指针都是从Z的开端扫到Z的末端,所以时间复杂度也是线性的。

【在 r***u 的大作中提到】
: 现在搜索三个词,比如“hello”,"world",
: "goodbye", 搜索完成之后会有三个array,每一个array都存放着三个词在一篇文章里
: 的位置。写一个函数,返回两个值,代表文章中的两个位置,在这两个位置之间,“
: hello”,"world", "goodbye"至少各出现一次,而且要求这两个位置之间的距离尽可能
: 短。
: 我记得以前在版上看到有讨论这道题,可是我现在找不到了。

g****n
发帖数: 431
5
这个办法比较好,也比较简单。如果in-place做还是有些难度的。

度。

【在 p*u 的大作中提到】
: 我想到一个方法是这样的:
: 1,三个数组A,B,C分别保存3个单词的位置,假设是数组是升序的。
: 2,将三个数组合并为一个数组Z = A + B + C,合并后的数组Z也是升序的,然后在每
: 一个位置记录一下,这个位置是从A,或者B,还是C得来的。这个是线性的时间复杂度。
: 3,由于要求是3个单词至少出现一次。所以可以设计这样一个算法:
: 有两个指针begin和end,并记录begin和end这个区间内3个单词分别出现的次数。
: 最开始begin和end都指向Z的开端。然后end开始往后扫:当发现begin到end区间内
: 所有单词的次数都大于等于1的时候,找到了一个候选解。当发现把begin指针所在的单
: 词去掉之后,区间内这个单词的个数不会为0,则把begin指针向前移。
: 所有候选解中距离最短的一个,就是最后要找的解。

d****2
发帖数: 6250
6
top[3] 记录每个array当前的位置,初始-1
取三个array top[]位置后最小的下一个为next,update相应的top[], 找出三个array
在top位置的最大最小,如果差值比min_cost小(top指向-1时差值为无穷大),
更新min_cost, repeat
1 (共1页)
进入JobHunting版参与讨论
相关主题
请问可以用二分法判断一个数组是否sorted吗?刚看到的一道google面试题
MS Onsite面经问几道算法题
问个算法题,修改版一个有关数组的面试题 (难度较高)
问个微软面试题问道fackbook面试题
问个面试题分享一道面试题
找第K个最小的元素Amazon 面试题
问个题目,找不在区间内的所有数find median for k sorted arrays
问一道google面试题(from careercup)merge k个数组怎样的方法好?
相关话题的讨论汇总
话题: 位置话题: 三个话题: array话题: begin话题: end