【问题标题】:Arrange players in football team according to their heights根据身高安排足球队中的球员
【发布时间】:2020-04-06 15:17:52
【问题描述】:

我最近在一次采访中被问到这个问题。问题如下:

给定数组 A 和数组 B 中两支足球队球员的身高。现在,您必须告诉您是否可以在以下约束条件下安排团队拍照。

  1. 一队将站成一排(一队的所有球员必须在一起)。
  2. 站在前面的一队球员的身高应小于站在他身后的另一队球员的身高。

对此的后续问题是,如果有 N 个团队,您可以为照片选择的团队 K 的最大数量是多少,这样他们就会遵循上述限制。

我想出了 2 个团队的解决方案,但想不出后续问题的解决方案。

【问题讨论】:

  • 请澄清后续问题是指可以满足约束的完整团队的最大数量,还是分组在自己团队中的最大成员数量,可以选择,满足约束。
  • 最大团队数。也有问题更新。

标签: algorithm data-structures


【解决方案1】:

给定两个团队,我们可以判断两者是否可以一起出现在图片中,如果可以,那么哪个在前面。正如@typewriter 所说,这会导致部分顺序。这种偏序可以表示为无环有向图。

此时我们可以应用任何著名的Topological Sort 算法来得出线性顺序。

现在我们按该顺序处理团队,并为每个团队存储以下两条信息:

  1. 图中这个前面可以有多少支队伍?

  2. 在最大的画面中,他们面前的下一个团队是什么?

(我们通过选择可以在同一张图片中最大可能图片的上一个团队来确定这一点。我们将其标记为下一个团队,并且该团队可以在图片中再有一个团队。这是一个示例动态规划算法。)

当我们完成整个列表的处理后,寻找可以拥有最多团队的团队。然后遍历数据结构以确定哪些团队应该在图中。

如果有 M 个玩家的 N 队,这个算法应该在O((N + log(M)) * N * M) 中运行。 O(log(M) * N * M) 位来自 N 各种单独的团队。 O(N^2 * M) 位来自查找所有团队成对比较。拓扑排序和动态规划位比第二步快。

【讨论】:

    【解决方案2】:

    这是一个有趣的问题。对于两个团队,您可以按长度对两个团队进行排序。如果团队 A 中的第 n 个成员比团队 B 中的第 n 个成员长,那么这些团队在 POSET 意义上是可比的。 IE。你可以说A队比B队长。

    并不是每支球队都可以通过这种方式进行比较。排序后的团队高度增加,但增加的功能仍可能相交。由于并非每对团队都具有可比性,因此所有团队的集合称为部分有序集或 POSET。你可能想看看这个:https://people.math.gatech.edu/~trotter/math-3012/3012-Lecture-14.pdf

    问题的后续部分可以解释为找到此 POSET 的高度。即一张照片中可以容纳的最多团队数量是多少。

    我在谷歌搜索中找不到明确的算法,但我确信它存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多