[Algo/Programmers]Java-最大数
16840 ワード
[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)
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;
}
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));
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));
他の文字列が表示された場合は、intを「a-b」の順に返し、その文字のAskyコード値を減算します.
昇順:(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でソートするためのもう一つのインタフェース.Comparable
とComparator
の2種類があります.Comparable
インタフェースは、通常、オブジェクトの固定位置合わせに使用されます.Comparator
インタフェースは、デフォルトの位置合わせとは異なる位置合わせに使用されます.Reference
この問題について([Algo/Programmers]Java-最大数), 我々は、より多くの情報をここで見つけました https://velog.io/@rgunny/AlgoProgrammers-자바-가장-큰-수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol