给定两个数组,找到更多的元素

时间:2019-04-27 01:19:02

标签: arrays algorithm

这是我在一家科技公司遇到的面试问题。我弄错了,我认为这注定了我的机会,但是老实说,我仍然找不到答案……这就是问题所在。假设序列中的所有元素都是唯一的。

我们有两个有限序列: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的长度。我没有找到解决方法。

有人有主意吗?

2 个答案:

答案 0 :(得分:0)

如果有一种可以解决此问题的算法,则通过设置Y = X,可以使它提供足够的信息来对X进行排序,而无需X中的元素之间进行任何进一步的比较。因此,在通常的假设下,您无法在线性时间内执行此操作,即X中的任意整数可以在固定时间内进行操作,但对其大小没有固定限制。

您可以通过在X中向后走,并维护到目前为止看到的元素的顺序统计树,很容易地在O(N log N)时间中完成此操作。参见https://en.wikipedia.org/wiki/Order_statistic_tree

答案 1 :(得分:-1)

我认为这与不可能进行排序是相同的,这是原因

为解决此问题,我们应将状态用于先前的计算保存在有限数量的变量中,例如存储加,减或乘。 因此,如果A中有很多数字,而B中却没有数字,那显然是没有用的,而且我们已经知道唯一可行的解​​决方案是将先前的状态保存在有限变量中,因此我们可以没有仅与A中的项目相关的数字。

到目前为止,我们知道要解决的问题是应该弄清楚保存状态算法,对于保存状态,我们只能在Y中存储一些代表当前元素的所有先前编号的数字,所有这些计算都不会之所以提供帮助,是因为我们不知道Y中的下一个项目(例如,当前数字是-1000,下一个数字是3000,而X中的其他数字是1,2,3 )。因此,因此我们无法保存与Y中的当前元素相关的任何存储的数字。我们也不能有与Y不相关的任何数字(因为它完全有用)

相关问题