在Java中,如何找到给定非负数数组的最大可能数

时间:2018-12-15 04:05:43

标签: java arrays algorithm sorting

问题陈述: 我在Java中使用String形式的非负数数组,我想安排整数以形成最大可能数。

示例:在下面的输入中给出:

label

排列“ 9623415”给出的数字最多。

注意:我了解我们可以按降序对所有数字进行排序,但无法进行排序。例如,自然顺序中的15大于9,但是在解决方案中“ 9”在“ 15”之前。在这种情况下,实现自定义比较器的最佳方法是什么?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-1)

您需要的是public int compareTo(String anotherString)的方法String,该方法按字典顺序给您提供字符串的顺序

更新1: 什么是字典顺序。

Frome Java Doc:

  

这是字典顺序的定义。如果两个字符串不同,则它们要么在某个索引处具有不同的字符(这是两个字符串的有效索引),要么它们的长度不同,或者两者都存在。如果它们在一个或多个索引位置具有不同的字符,则令k为最小索引;那么,在字符串位置k处的字符具有较小值(通过使用<运算符确定)的字符串,按字典顺序在另一个字符串之前。在这种情况下,compareTo返回两个字符串中位置k处两个字符值的差,即值:

     

this.charAt(k)-anotherString.charAt(k)

     

如果没有索引位置在它们之间有所不同,则较短的字符串按字典顺序在较长的字符串之前。在这种情况下,compareTo返回字符串长度的差-即值:

     

this.length()-anotherString.length()

因此,字符串9将按字典顺序出现在字符串15的前面,因为它们在索引0处具有不同的字符,并且字符9大于字符{ {1}}。如果仔细阅读了词典顺序,您会发现该顺序正是OP所需要的!

Update2:为什么按字典顺序排序是解决此问题的关键

问题中字符串的字典顺序如下:

1

因此,在获得此顺序后,问题应该很简单:只需迭代顺序即可,然后得到答案。

更新3:如何处理类似"9", "62", "34","15"这样的特殊情况,因为我们需要"9"&"90"而不是"990"

在这种情况下,字典顺序将失败。但是很容易找出解决办法:

我们可以使用"909"代替str1.compareTo(str2)。此处的关键是确保这两个字符串至少具有一些不同的数字,因此我们不能通过比较那里的长度来获得顺序。