【问题标题】:Given two arrays, find the number of elements greater给定两个数组,找出更大的元素个数
【发布时间】: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) 如果可以的话应该有排序算法

标签: arrays algorithm


【解决方案1】:

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

你可以很容易地在 O(N log N) 时间内完成它,方法是向后遍历 X 并维护到目前为止看到的元素的顺序统计树。见https://en.wikipedia.org/wiki/Order_statistic_tree

【讨论】:

  • 我在优先队列的面试中实现了 O(N log N) 算法,但有人告诉我有一种方法可以使它成为 O(N)。
  • 给我的提示是使用堆栈,但我想不通。
  • 您是否有任何其他约束,例如 X 中的元素是连续的还是密集的?大概你被告知它们都是独一无二的,或者解决方案不明确。
  • 是的,序列的所有元素都是唯一的。我忘了在原帖里加上,所以我刚才修改了。
  • 身份证。我得到的提示是 1) X, Y 的顺序相同,因为 Y 是一个子序列。 2)想办法利用以前的“计数” 3)使用堆栈
【解决方案2】:

我认为这不可能与排序不可能一样,这就是原因

为了解决这个问题,我们应该将先前计算的状态保存在有限数量的变量中,例如存储加法、减法或乘法。 因此,如果A 中有一个很大的数字,那B 中没有,很明显它根本没有用,而且我们已经知道唯一可能的解决方案是将先前的状态保存在有限的变量中,所以我们不能有数字仅与 A 中的项目相关。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2012-03-18
    • 2017-09-12
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2012-01-21
    相关资源
    最近更新 更多