博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
把数组排成最小的数
阅读量:5123 次
发布时间:2019-06-13

本文共 1434 字,大约阅读时间需要 4 分钟。

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

思路一

要输出数组的最小排列,那么可以将该数组能够组成的所有排列都列举出来,然后依次比较找出最小排列值;但是n个元素就有n!个全排列数,并且还需要找最小值,这个时间复杂度明显很大。

思路二

该思路不用去找该数组可以组成多少个全排列,而是直接对该数组进行排序,而这里的排序不是简单的根据数组中的元素大小排序,而是我们自定义一个排序规则:根据拼接后的字符串的大小进行排序,如果对于整数m 和整数n,如果mn < nm ,那么我们就设定n应该排序在m的前面

int n;        String s = "";        ArrayList
list = new ArrayList
(); n = numbers.length; for(int i = 0; i < n; i ++){
list.add(numbers[i]); } Collections.sort(list, new Comparator
() {
@Override public int compare(Integer o1, Integer o2) {
String s1 = o1 + "" + o2;//将整数转为字符串 String s2 = o2 + "" + o2; //小于0:s1
s2 等于0:s1=s2(升序排列) //将两个int类型的数拼接为字符串的形式进行比较可以防止溢出(隐形的大数问题) return s1.compareTo(s2);//虽然比较的拼接的字符串大小,但是最后还是根据字符串的大小来对数组的元素进行排序,只不过我们只是参照字符串的比较这个标准来进行排序的,而不是简单的升序或者降序排列 } }); //拼接字符串 for(int j:list){
//foreach语句 s += j; } return s;
  • 注意如果这里return s2.compareTo(s1),那么最终就是按照最大排列进行比较了,最后返回的就是降序排列的数组

  • 这里借助了

    public static 
    void sort(List
    list, Comparator
    c) {
    list.sort(c);}

自己构建一个Comparator,自定义排序方法

《算法导论》第三版

转载于:https://www.cnblogs.com/flyingcr/p/10698550.html

你可能感兴趣的文章
【BZOJ1565】 植物大战僵尸
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
中国烧鹅系列:利用烧鹅自动执行SD卡上的自定义程序(含视频)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
python常用函数
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>
数据库3
查看>>
存储分类
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>