【发布时间】:2020-05-08 13:24:15
【问题描述】:
给定 2 个相同长度的双精度数组(“主”数组“A”和辅助“B”)。我想编写一个将 B 对齐到 A 的函数。
我定义了对齐方式,对于 A 的每个元素,如果 B 包含该元素,则该元素应放置在与 A 相同的索引处。
关于 A 和 B 的一些特殊性:
- A 和 B 都经过初始排序。对齐后,B DON'T 不需要排序。
- A 和 B 的长度相同。
- A 和 B 中都没有重复项
- A 和 B 相当小(最多 10 个元素,通常大约 3-5 个元素)。
- A 不应该改变。
- 我标记了问题 C#,因为这将是我的最终实现,但我可以调整答案
- 该函数会被频繁调用(每秒 100k/1M),我需要一些高效的东西。
Ex1:
A = [10, 11, 12, 13]
B = [10, 12, 14, 16](初始)
= > [10, 16, 12, 14] B 最终([10, 14, 12, 16] 也是有效的,只有元素'10'和'12'的位置是相关的(其他元素是不在 A))
Ex2:
A = [10, 11, 12, 13]
B = [08, 09, 10, 11](初始)
= > [10, 11, 08, 09] B 决赛
我写了两种不同的方法:一种是使用字典来保留现有元素的位置,另一种是使用两个串联前进的指针。但是,我发现代码对于它应该做的事情相当复杂/混乱。
有人知道这方面的现有算法或干净有效的方法吗?
【问题讨论】:
-
在您的第一个示例中,为什么 B 的最后 3 个数字位置从 12,14,16 更改为 16,12,14?
-
为什么12和16在Ex1中换了位置?
-
@auburg 和 Wyck 是为了将 '12' 放在索引 3 处,因为 '12' 在 A 中的索引 3 处(元素 '14' 和 '16' 的位置无关紧要)