gpt4 book ai didi

java - 找到将给出数组中最大数字的数字顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:00 25 4
gpt4 key购买 nike

假设我有一个数组:

int[] arr = {23, 4, 46, 720, 56};

我如何找到给出最大数字的数字顺序?

例如数组arr中,顺序为

7205646423

编辑:也可以有 n 个数字,即不一定限于 3。

例如,

int[] arr = {223, 23, 72, 7, 64, 9};

答案是

97726423223

最佳答案

字典排序是一个好的开始。

但是,当考虑到例如[854, 854853, 854855] 需要排序为[854855, 854, 854853] 时,困难就来了。

解决此问题的一种方法是定义一个比较器,该比较器比较数字的串联版本(即比较 abcdef 转换为比较abcdefdefabc)。

最简单的版本:

// processing numbers as strings
List<String> array = Arrays.asList("854", "854853", "854855");
Collections.sort(array, new Comparator<String>() {
@Override
public int compare(String o1, String o2)
{
// negative since we want biggest first
return -(o1+o2).compareTo(o2+o1);
}
});

Test .

compare 函数无需实际连接数字的开销,只需就地进行检查:

@Override
public int compare(String s1, String s2)
{
int i;
int length = s1.length() + s2.length();
for (i = 0; i < length; i++)
{
char c1 = get(s1, s2, i),
c2 = get(s2, s1, i);
if (c1 != c2)
{
return (c1 > c2 ? -1 : 1);
}
}
return 0;
}

private char get(String s1, String s2, int index)
{
if (index < s1.length())
return s1.charAt(index);
else
return s2.charAt(index - s1.length());
}

Test .

我最初有一个更复杂的版本,理论上应该快一点,因为它有几个 for 循环,让索引环绕到另一个数组中,而不是一个循环,检查长度,但简单胜过我在这里的表现差异。如果您有兴趣,请随时查看帖子历史记录 ( rev 3 ),但请注意该版本有一个错误 - 在最后一个循环之后,另一个索引应该包装到另一个数组中。

关于java - 找到将给出数组中最大数字的数字顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18612317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com