【问题标题】:Sorting an array based on comparison with another array of same elements in different order基于与另一个相同元素数组的比较以不同的顺序对数组进行排序
【发布时间】:2011-09-01 17:14:52
【问题描述】:

给定两个数组

a[] = {1,3,2,4} 
b[] = {4,2,3,1} 

两者的编号相同,但顺序不同。 我们必须对两者都进行排序。条件是您不能比较同一数组中的元素。

【问题讨论】:

  • 这对任何人都有意义吗?
  • 我不太明白。您是否正在转换 b 直到它具有与 a 相同的顺序?在这种情况下,你不总是只返回一个吗?
  • 如果面试问题是这样的,我会放弃这份工作。真的。
  • 来吧,这根本不是最奇怪的面试问题。接受现实吧。
  • @Mu Qiao - 在您观看之前被编辑修复之前很奇怪。

标签: algorithm sorting


【解决方案1】:

我可以给你一个基于快速排序的O(N*log(N))时间复杂度的算法。

  1. 随机选择数组A中的一个元素a1
  2. 使用 a1 对数组 B 进行分区,注意只需将数组 B 中的每个元素与 a1 进行比较
  3. 分区返回位置 b1。使用 b1 对数组 A 进行分区(同步骤 2)
  4. 如果分区子数组的长度大于 1,则转到第 1 步。

时间复杂度:T(N) = 2*T(N/2) + O(N)。所以根据主定理,总体复杂度为 O(N*log(N))。

【讨论】:

    【解决方案2】:

    不确定我是否正确理解了这个问题,但根据我的理解,任务如下:

    对给定数组a 排序直接比较来自a 的任意两个元素。然而,我们得到了第二个数组b,它保证包含与a 相同的元素,但顺序是任意的。不允许修改b(否则只需对b 排序并返回...)。

    如果a 中的元素不同,这很容易:对于a 中的每个元素,计算b 中有多少元素更小。这个数字为我们提供了按排序顺序的(从零开始的)索引。

    元素不一定不同的情况留给读者:)

    【讨论】:

    • 正确的好工作解决方案。它是 O(n^2)。预期的解决方案是 O(nlogn)
    • 当然,你可以构造一个b 的 BST 以使其达到 O(nlogn),但这与立即排序 b 相同......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多