剑指offer30--将数组排列成最小的数
来源:互联网 发布:java接收命令行参数 编辑:程序博客网 时间:2024/06/06 07:25
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例子说明:例如输入数组{3, 32, 321},则扫描输出这3 个数字能排成的最小数字321323。
编程思想:
(1)找到一个排序的规则,这个规则不是简单的比较两个数的大小,比如321和33,我们应该把321放到前面,而不是将数字比较小的33放到前面。根据这个规则创建一个比较器。(2)使用上面创建的比较器来对数组进行排序,也就是将该放到前面的数字放到前面。在这里我们使用的是快速排序的方式来排序的。
(3)通过StringBuider Builder的append的方法来将字符串相连
注意问题:String中compareTo()方法进行了重写,所以我们可以直接使用。
package 剑指offer;import java.util.*;/*题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。*/public class Test33 {//定义一个比较特殊的比较器,用来比较mn和nm的大小public static class MComparator implements Comparator<String>{public int compare(String str1, String str2){if(str1 == null || str2 == null){throw new IllegalArgumentException("Not Null");}String s1 = str1 + str2;String s2 = str2 + str1;return s1.compareTo(s2);}} /** * 快速排序算法 * * @param array 待排序数组 * @param start 要排序的起始位置 * @param end 要排序的结束位置 * @param comparator 自定义的比较器 */public static void quickSort(String ary[], int start, int end, Comparator<String> comparator){if(start < end){String strFlag = ary[start];int left = start;int right = end;while(start < end){while(start < end && comparator.compare(ary[end], strFlag) >= 0){end--;}ary[start] = ary[end];while(start < end && comparator.compare(ary[start], strFlag) <= 0){start++;}ary[end] = ary[start];// 如此循环往复} ary[start] = strFlag; quickSort(ary, left, start - 1, comparator); quickSort(ary, start + 1, right, comparator); }}public static String printMinNumber(String[] array) { if (array == null || array.length < 1) { throw new IllegalArgumentException("Array must contain value"); } MComparator comparator = new MComparator(); quickSort(array, 0, array.length - 1, comparator); StringBuilder builder = new StringBuilder(256); for (String s : array) { builder.append(s); } return builder.toString(); }public static void main(String args[]){ String[] data = {"3", "5", "1", "4", "2"}; System.out.println(printMinNumber(data)); String[] data2 = {"3", "32", "321"}; System.out.println(printMinNumber(data2));}}
s1.compareTo(s2)中如果s1<s2,则返回负数
1 0
- 剑指offer30--将数组排列成最小的数
- 将数组中的元素排列成一个最小的数
- 把数组排列成最小的数
- 把数组排列成最小的数
- [剑指offer]把数组排列成最小的数
- 剑指offer-把数组排列成最小的数
- 剑指Offer30最小的k个数
- 剑指offer30:最小的k个数
- offer30--最小的k个数
- 寻找最小(或最大)的k个数(剑指offer30)
- 【面试题】剑指offer30--最小的k个数
- 将数组组成最小的数
- 将数组排成最小的数
- 剑指Offer(33)求数组排列出来的最小数
- 将数组中的数逆向排列
- 数组------将数组元素排成最小数
- 利用Java将数组里面最小的数输出。
- 编写Java程序,将数组中最小的数输出。
- SIP代理服务器(1)
- vi & vim 打开 关闭 保存 文件
- mongodb入门
- JNI编程<一>
- Linux 基础学习笔记(二)
- 剑指offer30--将数组排列成最小的数
- 开发工具下载地址
- usb通信时HOST和DEVICE要做的事情
- volley乱码
- 切圆角的特殊需求
- RxJava 和 RxAndroid 四(RxBinding的使用)
- SIP代理服务器(2)
- Android新特性、新组件及当前较潮流的设计Demo集合——Android Material Design
- VPS安装Vagrant