首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中找到一个非负数数组中的最大可能数

如何在Java中找到一个非负数数组中的最大可能数
EN

Stack Overflow用户
提问于 2018-12-15 04:05:43
回答 1查看 563关注 0票数 1

问题陈述:I在中有一个字符串形式的非负数数组,我希望将整数排列成尽可能大的数字。

示例:提供如下输入:

代码语言:javascript
复制
String[] numbers = {"15", "9", "62", "34"};

"9623415“的安排给出的数字最多。

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

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-12-15 04:11:39

lexicographically的方法public int compareTo(String anotherString)是您所需要的,它给出了字符串String的顺序。

Update1:是什么是字典排序。

Frome Java Doc:

这是词典顺序的定义。如果两个字符串是不同的,那么它们在某个索引处有不同的字符,这是两个字符串的有效索引,或者它们的长度不同,或者两者都不同。如果它们在一个或多个索引位置上有不同的字符,则设k是最小的这样的索引;那么其在位置k处的字符的值较小的字符串,如使用<运算符所确定的,按字典顺序排在另一个字符串之前。在本例中,compareTo返回两个字符值在两个字符串中的位置k处的差值--即值: this.charAt(k)-anotherString.charAt(k) 如果没有索引位置不同,那么较短的字符串在词汇学上先于较长的字符串。在本例中,compareTo返回字符串长度的差异-即值: this.length()-anotherString.length()

因此,字符串9将以字典顺序出现在String 15前面,因为它们在0索引处有不同的字符,而char 9大于char 1。如果你仔细阅读字典排序,你会发现这个顺序正是OP所需要的!

Update2:为什么词典排序是这个问题的关键

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

"9", "62", "34","15"

所以在你得到这个顺序之后,问题应该是琐碎的:只需迭代有序序列,你就可以得到答案。

更新3:如何处理特殊情况如:"9"&"90",因为我们需要"990"而不是"909"

在这种情况下,字典排序将失败。但很容易找到一个解决办法:

而不是str1.compareTo(str2),我们可以使用(str2+str1).compareTo(str1+str2)。这里的关键是确保这两个字符串至少有一点不同的数字,所以我们不能通过比较那里的长度来得到顺序。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53789433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档