最大ソート数
34357 ワード
初めての試み
public class Solution {
public static void swap(int[] numbers, int leftIndex, int rightIndex) {
int temp = numbers[leftIndex];
numbers[leftIndex] = numbers[rightIndex];
numbers[rightIndex] = temp;
}
public static void sort(int[] numbers, int maxNum) {
if (maxNum <= 0) return;
for (int index = 0; index < numbers.length - 1; index++) {
int left = numbers[index];
int right = numbers[index + 1];
if (isRequireSwap(left, right)) {
swap(numbers, index, index + 1);
}
}
sort(numbers, maxNum - 1);
}
public static int getValue(String value, int i) {
int idx = i;
if (value.length() < i + 1) {
idx = value.length() - 1;
}
return Integer.parseInt(String.valueOf(value.charAt(idx)));
}
public static boolean isRequireSwap(int leftValue, int rightValue) {
String left = String.valueOf(leftValue);
String right = String.valueOf(rightValue);
int diff = left.length() - right.length();
for (int i = 0; i < left.length() + Math.abs(diff); i++) {
int ll = getValue(left, i);
int rr = getValue(right, i);
if (rr > ll) return true;
}
return false;
}
public static String makeAnswer(int[] numbers) {
StringBuilder answer = new StringBuilder();
for (int number : numbers) {
answer.append(number);
}
return answer.toString();
}
public static String solution(int[] numbers) {
sort(numbers, numbers.length);
return makeAnswer(numbers);
}
public static void main(String[] args) {
String answer = solution(new int[]{3, 30, 34, 5, 9});
System.out.println(answer);
}
}
ビット数で比較しましたが、タイムアウトに失敗しました二次試行
public class Solution2 {
public static void main(String[] args) {
String answer = solution(new int[]{3, 30, 34, 5, 9});
System.out.println(answer);
}
public static String solution(int[] numbers) {
String[] strings = numbersToStrings(numbers);
sort(strings);
String answer = answer(strings);
return answer.startsWith("0") ? "0" : answer;
}
private static String answer(String[] result) {
return String.join("", result);
}
private static void sort(String[] strings) {
Arrays.sort(strings, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
}
private static String[] numbersToStrings(int[] numbers) {
String[] result = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
result[i] = numbers[i] + "";
}
return result;
}
}
文字列に変換して通過します.まさか0を繰り返すとは通過後にマスターコードを変更
public class Solution {
public static void swap(String[] strings, int leftIndex, int rightIndex) {
String temp = strings[leftIndex];
strings[leftIndex] = strings[rightIndex];
strings[rightIndex] = temp;
}
public static void sort(String[] strings, int count) {
if (count > strings.length) return;
for (int index = 0; index < strings.length - 1; index++) {
String left = strings[index];
String right = strings[index + 1];
if (isRequireSwap(left, right)) {
swap(strings, index, index + 1);
}
}
sort(strings, ++count);
}
public static boolean isRequireSwap(String left, String right) {
return (left + right).compareTo(right + left) < 0;
}
private static String[] numbersToStrings(int[] numbers) {
String[] result = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
result[i] = numbers[i] + "";
}
return result;
}
public static String makeAnswer(String[] strings) {
return String.join("", strings);
}
public static String solution(int[] numbers) {
String[] strings = numbersToStrings(numbers);
sort(strings, 0);
String answer = makeAnswer(strings);
return answer.startsWith("0") ? "0" : answer;
}
public static void main(String[] args) {
String answer = solution(new int[]{3, 30, 34, 5, 9});
System.out.println(answer);
}
}
でもタイムアウトソートアルゴリズムは問題のようです.聞いてから整理します!Reference
この問題について(最大ソート数), 我々は、より多くの情報をここで見つけました https://velog.io/@dhrod0325/프로그래머스-가장-큰-수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol