[Algo/Programmers]Java-最大数


[Algorithm/Programmers]Java-最大数


問題プラットフォーム難易度タイプ解答リンク問題リンク最大プログラムレベル第2 Sort に答える質問する

に答える



0または鞅の整数を与え、
最大数を作成するには、接続する必要があります.
与えられた数の順序をどのように再配置するかを考えるべきだと思います.
特別な数学的アイデアがない場合は、総数から最大数を選択できます.
ただし、降順で並べ替えると、最大数を簡単に得ることができます.
ただし,Javaで降順ソートを行う場合は,Comparatorオブジェクトを直接実施しなければならない.Collections.reverseOrder()がありますが、最終的にはComparatorのオブジェクトであり、primitive typeを使用する場合は、wrapper classに変更する必要があります.
アルゴリズムを解くときは簡単に実施するのが便利です.
public String solution(int[] numbers) {
    // 문자열을 return할 배열 생성
    String[] str = new String[numbers.length];

    int len = str.length;
    // 1. int to String
    for (int i = 0; i < len; i++) {
        str[i] = String.valueOf(numbers[i]);
    }

    // 2. Desc Sort
    Arrays.sort(str, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return (o2+o1).compareTo(o1+o2);
        }
    });

    // 3. Get Answer
    String ans = "";
    if (str[0].equals("0")) { // 내림차순 정렬을 했으므로, 0번째 인덱스가 "0"일 시, 모두 0
        ans += "0";
    } else {
        for (int i = 0; i < len; i++) {
            ans += str[i];
        }
    }

    return ans;
}

Java Comparator実装


String Desc

Arrays.sort(str, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return (o2+o1).compareTo(o1+o2);
        }
    });

Arrays.sort(str, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));

String Asc

Arrays.sort(str, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return (o1+o2).compareTo(o1+o2);
        }
    });

Arrays.sort(str, (o1, o2) -> (o1 + o2.compareTo(o1 + o2));
a.compareTo(b)
  • から順に比較し、
    他の文字列が表示された場合は、intを「a-b」の順に返し、その文字のAskyコード値を減算します.
  • 降順:(o 2+o 1).compareTo(o1+o2);
    昇順:(o 1+o 2).compareTo(o1+o2);

    Stream, Lambda

    String str = "ACBED"; 
    String[] str = str.split(""); // to array
    
    Stream.of(str).sorted().collect(Collectors.joining()); // ASC
    Stream.of(str).sorted(Comparator.reverseOrder()).collect(Collectors.joining()); // DESC
    Stream.of(str).sorted((o1,o2)->o1.compareTo(o2)).collect(Collectors.joining()); // ASC
    Stream.of(stringArr).sorted((o1,o2)->o2.compareTo(o1)).collect(Collectors.joining()); // DESC
    
    Javaでソートするためのもう一つのインタフェース.ComparableComparatorの2種類があります.Comparableインタフェースは、通常、オブジェクトの固定位置合わせに使用されます.Comparatorインタフェースは、デフォルトの位置合わせとは異なる位置合わせに使用されます.