【发布时间】:2013-01-14 15:57:39
【问题描述】:
这是一道面试题。我们有一个正整数数组,我们必须重新排列和连接数组元素,以使结果数是使用该数组可以形成的最大数。
例如:
[884 88] -> 88884
[20 19 90] -> 902019
[909 90] -> 90990
我的解决方案:我认为首先按最高有效数字 (MSD) 以降序对元素进行排序。
即对于 909 , 12, 88 我们将在排序后得到 909, 88, 12 并且对于具有相同 MSD 的那些排序第二个 MSD 并继续这样做。
因此,对于数组 909、99,我们将拥有 99 和 909 并将它们组合起来。 但是对于数组 909、90,我们将有 90、909,这是一个问题,因为我们在两个数字中都有 90,所以
90
909 ---> 这里可能有两种组合,因为 90 是常见的,所以从 909 中删除公共部分后留下 9,所以我会检查将这个 9 附加到 90 是否使其变大。在这种情况下,在 90 前面附加 9 我们得到 990,它大于 909,所以 909 后面会跟着 90。所以答案是 90990。
但是当我尝试对其进行编码时,我发现由于涉及的复杂性太高而难以编码。有什么建议吗?
【问题讨论】:
-
巧合的是,这个问题是在 Python 上下文 very recently 中提出的,并发布了几个可行的解决方案。
-
我刚看到这个问题。我搜索时 Stackoverflow 没有显示它,但无论如何我们可以在这里讨论算法,使其更通用。