面试题:构造最大数

感谢陈立人http://weibo.com/lirenchen?topnav=1&wvr=5&topsug=1 的每天一道面试题的资料整理。关注“待字闺中”的微信,里面有题目的分析。我会post他整理的题目,供大家一起学习。

原题:

给定只包含正整数的数组,给出一个方法,将数组中的数拼起来,得到的数,是最大的。例如:【4,94,9,14,1】拼接之后,所得到的最大整数是9944141。

分析:

我的第一反应就是排序。我采用的方法都是从特殊到一般。


  • 当数组只有一个数的时候:直接返回这个数;
  • 当数组有两个数的时候:就应该比较这两个数;
如何比较?


要组成最大的整数,如【9,84】最大的整数位984,所以比较时不能仅仅比较这两个数在数值上的大小,而是要从这两个数的第高位开始,9>8,所以就变成984这个数。

而最高位相等的情况,有要继续往下分:例如【9,94】或者【1,14】。两个数最高位的都相等,然后比较第二最高位。如果某个数不存在那个位,就拿起之前的最高位与另一个数的第二最高位比较。如【9,94】,因为最高位都相等,所以比较第二高位。因为【9】不存在第二高位,所以还是拿它的最高位与【94】的【4】比较,所以【9】比【94】“大”。同理,【14】比【1】“大”。如此类推,直至比较完所有数组内的数,得到一个顺序,按顺序输出便是满足要求的结果。

如题流程:【4,94,9,14,1】按上述方法排序后,可得【9,94,4,14,1】。此时输出排序后结果,便是最大的整数。

巧妙:

在比较两个数大小的时候,可以直接将这两个数分别以两种方式合拼在一起,然后再比较两个合并后的数,哪个大就采用哪种合拼方法。例如:【56,5】这两个数,合拼的两个数分别为【565】和【556】。【565】>【556】。所以采用【56,5】这种次序排序。


End



你可能感兴趣的:(排序,最大整数)