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刪除。



猜您在找 Leetcode練習(Python):排序類:第179題:最大數:給定一組非負整數,重新排列它們的順序使之組成一個最大的整數。 java-求一組整數中的最大值 pandas根據index操作與重新排列 Leetcode練習(Python):第441題:排列硬幣:你總共有 n 枚硬幣,你需要將它們擺成一個階梯形狀,第 k 行就必須正好有 k 枚硬幣。 給定一個數字 n,找出可形成完整階梯行的總行數。 n 是一個非負整數,並且在32位有符號整型的范圍內。 Leetcode練習(Python):數組類:第55題:給定一個非負整數數組,你最初位於數組的第一個位置。 數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個位置。 非負整數可重集去重&排序+獲得可重集的全排列的幾種方法 Problem Description 有n(n<=100)個整數,已經按照從小到大順序排列好,現在另外給一個整數x,請將該數插入到序列中,並使新的序列仍然有序。 Input 輸入數據包含多個測試實例,每組數據由兩行組成,第一行是n和m,第二行是已經有序的n個數的數列。n和m同時為0標示輸入數 最短路徑(給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。 說明:每次只能向下或者向右移動一步。) 一個線性表中的元素為整數,設計一個算法,將正整數和負整數分開,使線性表的前一半為負整數,后一半為正整數。(C語言) Java -- 給定一個int數組,拼接出最大數值
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM