我希望我的程式計算發生的字符交換次數,以按字母順序排列它們。有沒有簡單的方法可以做到這一點?這是我的代碼。
import java.util.Arrays;
import java.util.Scanner;
class ArrangingBooks{
public static void main(String[] args) {
Scanner scan= new Scanner(System.in);
String str = scan.nextLine();
char c[] = str.toCharArray();
Arrays.sort(c);
System.out.println(new String(c));
scan.close();
}
}
樣本輸入 = LLSLM
樣本輸入的輸出 = 2
uj5u.com熱心網友回復:
Arrays.sort
將選擇最優化的排序演算法,但除非您修改 Arrays 包,否則您將無法跟蹤這些步驟。
或者,您可以實作自己的排序代碼,或從網上復制/粘貼一個,并添加一個整數計數器以在每次排序回圈迭代時遞增。然后您將能夠獲得每個輸入的步驟數。
uj5u.com熱心網友回復:
您可以創建一個二維array
來存盤每個codePoint
及其index
. 然后你可以對array
比較進行排序codePoints
:
public static int countSortedSwaps(String str) {
int[] arr = str.codePoints().toArray();
int size = arr.length;
int[][] charIndices = IntStream.range(0, size).boxed()
.sorted(Comparator.comparingInt(i -> arr[i]))
.map(i -> new int[] {arr[i], i})
.toArray(int[][]::new);
boolean[] swp = new boolean[size];
return IntStream.range(0, size)
.filter(i -> swp[i] != true && charIndices[i][1] != i)
.map(i -> count(charIndices, swp, i)).sum();
}
private static int count(int[][] charIndices, boolean[] swp, int index) {
int count = 0;
int i = index;
while (swp[i] == false) {
swp[i] = true;
count ;
i = charIndices[i][1];
}
return (count - 1);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/393421.html
下一篇:帶反斜杠的字串到字典