问题:给定一个可以包含重复项的正整数数组,找到通过连接整数获得的最小数。例如:[3, 32, 321]
返回 321323
除了尝试所有 n!连接排列,我似乎找不到解决这个问题的好方法。我确实知道下面有一个很好的解决方案,但我无法理解为什么它是真的(如果你想尝试解决这个问题,请停止阅读这里):
我读过一个解决方案,我们可以使用比较器对数组进行排序,该比较器通过比较串联 的数值来比较两个数字
和串联 m
和 n
>mnnm
,排序后的数组将是给出最小数字的串联,但我不明白为什么这是真的。有什么想法吗?
最佳答案
您可以使用类似于冒泡排序的方法来解决这个问题。
首先,我们注意到最终结果的长度是固定的。
其次,结果是您可以创建的最小字典序字符串(因为所有可能字符串的长度是固定的,所以最小字典序也是最小数字)。
假设我们有两个数n
和m
,如果nm < mn,那么n应该总是在m之前。因为如果我们有一个字符串是 m...n,那么我们总是可以通过将其交换为 n...m 来获得更小的字符串。
所以我们继续交换数字,直到不能交换为止,这就是最终答案
关于performance - 我们如何通过串联数组中的整数有效地找到最小整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25396760/