performance - 我们如何通过串联数组中的整数有效地找到最小整数?

标签 performance algorithm sorting data-structures concatenation

问题:给定一个可以包含重复项的正整数数组,找到通过连接整数获得的最小数。例如:[3, 32, 321] 返回 321323

除了尝试所有 n!连接排列,我似乎找不到解决这个问题的好方法。我确实知道下面有一个很好的解决方案,但我无法理解为什么它是真的(如果你想尝试解决这个问题,请停止阅读这里):

我读过一个解决方案,我们可以使用比较器对数组进行排序,该比较器通过比较串联 的数值来比较两个数字 mn >mn 和串联 nm,排序后的数组将是给出最小数字的串联,但我不明白为什么这是真的。有什么想法吗?

最佳答案

您可以使用类似于冒泡排序的方法来解决这个问题。

  • 首先,我们注意到最终结果的长度是固定的。

  • 其次,结果是您可以创建的最小字典序字符串(因为所有可能字符串的长度是固定的,所以最小字典序也是最小数字)。

假设我们有两个数nm,如果nm < mn,那么n应该总是在m之前。因为如果我们有一个字符串是 m...n,那么我们总是可以通过将其交换为 n...m 来获得更小的字符串。

所以我们继续交换数字,直到不能交换为止,这就是最终答案

关于performance - 我们如何通过串联数组中的整数有效地找到最小整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25396760/

相关文章:

android - 在android中按字母顺序对联系人进行排序

algorithm - PostgreSQL 中任意排序的性能如何?

PHP:哪个更有效:连接的返回变量,还是单独返回每一行?

python - 为什么这需要这么长时间才能匹配?它是一个错误吗?

algorithm - 多标准排序/分配到集合中

algorithm - 简单的基数估计算法

c# - 返回结果还是先放到变量中?

java - 自动检查 Web 应用程序的更新

比较树的子树的Java算法

javascript - 使用 .sort((a,b) => a>b) 对数组进行排序是有效的。为什么?