您的位置:首页 > 职场人生

微软面试100题-68

2016-05-13 11:56 441 查看

68.把数组排成最小的数(数组、算法)。

题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。

例如输入数组{32, 321},则输出这两个能排成的最小数字32132。

请给出解决问题的算法,并证明该算法。

分析:这是09年6月份百度的一道面试题,

从这道题我们可以看出百度对应聘者在算法方面有很高的要求。

package com.interview.algorithm;

import java.util.Arrays;
import java.util.Comparator;

public class MinCombinedNum68 {

public String MinNumFromArray(String[] arr){
StringBuilder sb = new StringBuilder();
Comparator<String> c = new Comparator<String>(){

@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
String first = o1+o2;
String second = o2+o1;
return first.compareTo(second);
}

};

Arrays.sort(arr, c);
for(int i = 0; i < arr.length; i++){
sb.append(arr[i]);
}
return sb.toString();
}

public static void main(String[] args) {
// TODO Auto-generated method stub

String[] arr = {"3","32","49","1","12","121"};
MinCombinedNum68 min = new MinCombinedNum68();
System.out.println(min.MinNumFromArray(arr));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: