【发布时间】:2016-01-05 18:11:29
【问题描述】:
有众所周知的algorithmic problem,给定数字数组,例如[1, 20, 3, 14] 以这样一种方式排列数字,使它们尽可能形成最大的数字,在这种情况下为 320141。
在 SO 和其他网站上有很多解决方案,使用以下算法:
String[] strs = new String[nums.length];
for(int i=0; i<nums.length; i++){
strs[i] = String.valueOf(nums[i]);
}
Arrays.sort(strs, new Comparator<String>(){
public int compare(String s1, String s2){
String leftRight = s1+s2;
String rightLeft = s2+s1;
return -leftRight.compareTo(rightLeft);
}
});
StringBuilder sb = new StringBuilder();
for(String s: strs){
sb.append(s);
}
return sb.toString();
它确实有效,但我找不到该算法的正式证明。 quora 有一个答案,但我不会称之为正式证明。
谁能给我一个证明草图或参考一些书或文章?如何从最初的问题中得到这个解决方案?
PS 我试图解决最初的问题,但我的解决方案是错误的,我无法正确解决,现在我无法完全理解解决方案。
【问题讨论】:
-
quora 上的答案对我来说似乎很正式,尽管实际上只是一个草图。你还想要什么?
-
cobarzan 我尝试遵循 quora proof 但无法获得一些步骤,也许我需要更正式的或小步骤的东西。