如何对int数组中的元素进行排序以创建尽可能大的数字



我有一个练习排序一个数组(类型int),所以我可以得到最大的数字可能

一个例子:

1、3、9 = =比;931

1、3、9日60 = =比;96031

所以这是我的想法:这是不可能的,只是排序数组,以形成我想要的数字。所以我可以检查数组中每个元素的第一个数字,使用与冒泡排序相同的思想,只是一个小区别是我使用第一个元素来检查而不是仅仅使用arr[I]。但是我还是想知道除了使用我的想法,还有没有其他的方法(更有效率)。即使你的想法和我的想法完全一样,但你有一些改进。非常感谢

不可能只是对数组进行排序以形成我想要的数字。

事实上,这不是不可能的。

你需要的是设计和实现一个排序,这将导致(十进制)数字,使最终数字是最大的排序第一个;例如:对于你问题中的数字,顺序是:

9 < 60 < 3 < 1

你只需要计算出所有可能的非负整数所需的顺序是什么。一旦你解决了这个问题,编写一个Comparator类来实现排序。

提示:您可以使用递归来指定排序…

解决方案

对于降序顺序,我们在这里乘以-1数组中的每个值,然后对数组进行排序,然后再乘以-1。最后,我们使用字符串连接构建结果字符串并将其打印出来

import java.util.Arrays;
public class MyClass {
public static void main(String args[]) {
int[] array = {3,1,9};

for (int l = 0; l < array.length; l++){
array[l] = array[l]*-1;
}
Arrays.sort(array);
for (int l = 0; l < array.length; l++){
array[l] = array[l]*-1;
}
String res = "";

for(int i = 0; i < array.length; i++){
res+=array[i];

}
System.out.println(res);
}
}

输出
931

或者

或者就像@Matt在评论中提到的,你基本上可以以相反的顺序连接字符串。那么就不再需要*-1

的升序降序变换了。
import java.util.Arrays;
public class MyClass {
public static void main(String args[]) {
int[] array = {
9,
1,
3
};
String res = "";
Arrays.sort(array);
for (int l = array.length - 1; l >= 0; l--) {
res += array[l];
}

System.out.println(res);
}
}

希望它能按照你的要求工作->

public static void main(String[] args) {
Integer[] arr = {1,3,3,9,60 };
List<Integer> flat = Arrays.stream(arr).sorted((a, b) -> findfirst(b) - findfirst(a)).collect(Collectors.toList());
System.out.println(flat);

}

private static int findfirst(Integer a) {
int val = a;
if(val>=10) {

while (val >= 10) {
val = val / 10;
}
}
return val;
}

比较每个int的第一个数字,如果它是最大的,把它放在开始,然后继续,如果第一个字符是相等的,步进第二个等等,最大的胜利,如果它在max-char-size相同。如你所知,第一个被选中的将被推送,第二个紧随其后。

以那种方式9>在这种情况下,当u concat.

时,第一个字符总是最大的。比;9 & lt;没有比;09年& lt;

最新更新