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;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM