【发布时间】:2012-01-17 03:27:53
【问题描述】:
给定 2 个具有 int、A1 和 A2 的数组。 A1长度为L1,A2长度为L1+L2。 A1 和 A2 的前 L2 元素已排序。将第一个 L2 元素组合到 A2 中。 例如
A1: 1 3 6 0
A2: 2 5 7 13 10 22 11
result:
A1 + A2: 1 2 3 5 6 7 13 10 22 11
我的解决方案:
通过将 min { A1[i], A2[i]} 放入数组 B[i], O(2 * L2) 来选择每个元素 将 B 复制到 A2。 O(L1 + L2)。
不应更改未排序的部分。
有更好的解决方案吗?
谢谢
【问题讨论】:
-
好吧,我尝试了一些想法,但没有一个考虑到您的价值观几乎是有序的。我的直觉告诉我,你应该能够稍微好一点,但不会很多。即使是桶排序也抛弃了预排序的大部分优势。不过还在想……
-
“将第一个 L2 元素合并到 A2 中”,您的意思是“第一个 L1+L2 元素”吗?看起来是这样,因为您将 A2.length 定义为 L1+L2,而 L2 将是一个重要的数字,因为您想保留最后的 L2 数字并附加它们。
-
A2 大小将为 L2 +L2 + L1(已排序 + 未排序)
-
A1 末尾的 0 是什么意思?
标签: c++ algorithm search sorting data-structures