【发布时间】:2023-01-19 01:33:23
【问题描述】:
假设我有两个数组,它们都已排序,例如:
A: [1, 4, 5, 8, 10, 24]
B: [3, 6, 9, 29, 50, 65]
然后我将这两个数组合并为一个数组并保持两个数组的原始相对顺序
C: [1, 4, 3, 5, 6, 9, 8, 29, 10, 24, 50, 65]
有没有办法在 O(n) 时间内将 C 拆分为两个排序数组?
注意:不一定要变成原来的A和B
【问题讨论】:
-
有一些方法可以将它们拆分,但在没有更多信息的情况下不一定要拆分为原始的
A和B。例如,在上面的示例中,我们最终可能会得到[1,4,5,6,9,29]和[3,8,10,24,50,65]作为可能的拆分,等等。 -
是的,不一定变成原来的A和B,你能给我提示吗?
-
两个排序数组是否严格递增(所有元素都不同)?
-
是的,您可以假设两个原始数组严格递增
-
贪婪的方法会起作用:对于
C中的每个元素,尝试将其放入第一个排序数组中。如果不能,则该元素必须进入第二个排序数组。这个方案有效,但证明为什么会很有趣。