JAVA-给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。

题目描述

Arrays.sort()

Arrays.sort()中只有数组参数

int[] array = {5, 6, -1, 4};
Arrays.sort(array);

这种是默认的排序,按照字典序(ASCII)的顺序进行排序。

Arrays.sort()中数组参数和排序方法

使用提供的方法

String[] str = {“abc”, “aaa”, “abc”};
Arrays.sort(str, String.CASE_INSENSITIVE_ORDER);

String中定义的忽略大小写,完全通过字母的顺序进行排序

Arrays.sort(str, Collections.reverseOrder());
反向排序

自定义排序方法

出来使用java提供的排序方法外,还可以使用自定义的排序方法,自定义排序方法需要实现java.util.Comparetor接口中的compare方法。

public int compare(String a, String b) {
            // 返回正数表示要交换,正常为b+a,即大的放前
            // 由小到大排序(前者减去后者)
            // 由大到小排序(后者减去前者)
            String r1=a+b;
            String r2=b+a;
            return b.compareTo(a);
        }

int compare(Object obj1, Object obj2)
compare方法 返回负数时代表不交换
compare方法 返回0时代表不交换
compare方法 返回正数时代表交换

具体代码



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

/**
 * @Author: hwj
 * @Date: 2020/8/19 0:33
 * Desc: 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
 */
public class MaxNumber {


    public static void main(String[] args) {
        int[] num={3,30,34,5,9};
        System.out.println(largeNumber(num));
    }
    private static class LargerString implements Comparator<String> {

        @Override
        public int compare(String a, String b) {
            // 返回正数表示要交换,正常为b+a,即大的放前
            // 由小到大排序(前者减去后者)
            // 由大到小排序(后者减去前者)
            String r1=a+b;
            String r2=b+a;
            return r2.compareTo(r1);
        }
    }
    /**
     * 1. 获取整形数组的每个值,将其转化为String类型数组中
     * 2. 数组两两排列进行比较,得到最好的数组排序
     * 3。定义一个String类型字符串,数组拼接为字符串
     */
    public static String largeNumber(int[] num){
        String[] sArray=new String[num.length];
        for(int i=0;i<num.length;i++){
            sArray[i]=String.valueOf(num[i]);
        }
        Arrays.sort(sArray,new LargerString() );
        if(sArray[0].equals("0")){
            return "0";
        }
        String largeString="";
        for(int i=0;i<sArray.length;i++){
            largeString+=sArray[i];
        }

        return largeString;
    }
}

原文地址:https://www.cnblogs.com/alidata/p/13527047.html