把数组排成最小的数
来源:互联网 发布:图片做成视频软件 编辑:程序博客网 时间:2024/06/06 01:23
题目:
输入一个正整形数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中的最小的一个,例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字321323。
思路:
将数组转换成字符串,然后按照字符串的排序规则直接直接比较。也就是说"3"+"32" 和"32"+"3"比较,如果前者大于后者,则交换3和32的位置
public static void printMinNumber(int[] num){ if(num==null || num.length ==0)return ;String[] newNum = new String[num.length];for(int index=0;i<num.length;index++){newNum[index] = String.valueOf(num[index]);}for(int i =0 ;i<newNum.length-1 ;i++){for(int j=i+1;j<newNum.length ;j++){String temp1 = newNum[i]+newNum[j];String temp2 = newNum[j]+newNum[i];if(temp1.compareTo(temp2)>0)swap(newNum,i,j);//交换}}for(String te : newNum)System.out.print(te+" "); }
看了剑指Offer上面做的,定义了一个排序规则,借助qsort,其时间复杂度为O(nlogn)。
我们可以利用java中的Arrays.sort(),如下
public static void printMinNumber(int[] num){ if(num==null || num.length ==0)return ;String[] newNum = new String[num.length]; int index=0;for(int tem : num){newNum[index++] = String.valueOf(tem);} String s1 =num[0]+num[1];String s2 = num[1]+num[0];Arrays.sort(newNum,new Comparator<String>(){public int compare(String o1,String o2){return (o1+o2).compareTo(o2+o1);}});for(String te : newNum)System.out.print(te+"-----");}其实思想都是一样的,都是比较第一个加第二个和第二个加第一个哪一个比较大。
Arrays.sort()如果排序的是基本类型,底层实现是快排,如果排序的是对象类型,则使用的是归并排序。时间复杂度都为O(nlogn)。
0 0
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数--总结
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- TrafficStats——流量统计类的范例,获取实时网速
- HBase客户端API(整理 修改一下)
- [水题] hdu5387 多校联合第八场 Clock
- Python中文件读取readlines()方法
- JSON数组排序
- 把数组排成最小的数
- Andrew机器学习课程笔记(2)——神经网络、机器学习Tips
- UITextField使用步骤
- android成长
- C++ Primer 学习笔记与思考_4 ---getline&&size_type&&const_iterator混搭
- Linux--rsync实现文件同步
- jquery 实现点击其他地方隐藏之前点击显示的div标签等
- 人像磨皮美白
- HDU 5384 Danganronpa(AC自动机)