【发布时间】:2019-04-27 11:35:12
【问题描述】:
这是我从一家科技公司收到的面试问题。我弄错了,我认为这注定了我的机会,但老实说,我仍然无法找出答案......这是问题所在。假设序列的所有元素都是唯一的。
我们有两个有限序列:X={Xi}, Y={Yi} 其中 Yi 是 Xi 的子序列。
让我们将它们写成单独的数组: [X1, X2, ..., Xn], [Y1, Y2, ..., Yk] 其中 n 是 X 的长度,k 是 Y 的长度,显然,因为 Y 是 X 的子序列,所以我们有 n>=k。
例如
X=[1, 10, 5, 7, 11, -4, 9, 5]
y=[10, 7, -4, 9]
然后对于 Y 中的每个元素,我们想要找到 X 中 1) 出现在该元素之后 并且 2) 大于该元素的元素的数量。
使用上面的例子
X=[1, 10, 5, 7, 11, -4, 9, 5]
y=[10, 7, -4, 9]
ans=[1, 2, 2, 0]
explanation:
the first element of ans is 1 because only 11 appears after 10 and greater than 10 in X,
so there's only 1 element
second element of ans is 2 since 11, 9 both appear after 7 in X, so there are 2 elements
that appear after 7 and greater than 7.
the third element of ans is also 2 since 9, 5 appear after -4 and are both greater than
-4 in X.
the fourth element is 0 since no element in X appears after and greater than 9.
面试官希望我以 O(N) 的时间复杂度解决它,其中 N 是 X 的长度。我没有找到如何解决。
有人有想法吗?
【问题讨论】:
-
如果允许重复,就不能有多个答案吗?
-
@גלעד ברקן 感谢您的指出。我应该补充一点,所有元素都是独一无二的。
-
我认为这是不可能的,例如如果 x=y 那么我们想知道那个元素后面有多少个数字,它的排序方式,因为对于每个元素,我们想知道有多少个数字和我们应该检查所有其他元素并为整个数组重复它,并且不可能解决它 O(N) 如果可以的话应该有排序算法