Java 排列数字以形成最大整数,这是理解比较器的问题
下面是GFG从给定整数集生成最大数的代码Java 排列数字以形成最大整数,这是理解比较器的问题,java,comparator,Java,Comparator,下面是GFG从给定整数集生成最大数的代码 import java.util.*; public class GFG { static void printLargest(Vector<String> arr){ Collections.sort(arr, new Comparator<String>(){ @Override public int compare(String X, Stri
import java.util.*;
public class GFG {
static void printLargest(Vector<String> arr){
Collections.sort(arr, new Comparator<String>(){
@Override
public int compare(String X, String Y) {
String XY=X + Y;
String YX=Y + X;
return XY.compareTo(YX) > 0 ? -1:1;
}
});
Iterator it = arr.iterator();
while(it.hasNext())
System.out.print(it.next());
}
public static void main (String[] args) {
Vector<String> arr;
arr = new Vector<>();
arr.add("54");
arr.add("546");
arr.add("548");
arr.add("60");
printLargest(arr);
}
}
在比较器中,我们试图比较通过排列X和Y生成的最终字符串 例如:如果X是“546”,Y是“54”,那么X+Y将是“54654”,Y+X将是“54546”,Y+X>X+Y 算法说明 假设:假设数字不同,以简化问题 让我们使用冒泡排序来理解比较器背后的逻辑。在冒泡排序中,我们不断比较两个连续的元素,直到所有元素都是有序的 将要排序的数组设为
s1、s2、s3、s4…….sn
如果数组中有两个连续的元素X和Y,那么YX>XY
这两个元素的交换将创建一个更大的元素
s1 + s2 + .... + X + Y + ..sn < s1 + s2 + ..... Y + X + .. sn
但是通过改变Y和X的位置,我们可以创建一个比a更大的元素。因此a不是最大的元素。因此,我们矛盾地证明,该算法产生最大的整数。那些不是整数,那些是字符串。我怀疑这种排序算法是否真的有效:
compare
方法是不对称的。
s1 + s2 + .... + X + Y + ..sn < s1 + s2 + ..... Y + X + .. sn
A = s1 + s2 + ..... X + Y......sn