3 回答

TA貢獻1805條經(jīng)驗 獲得超10個贊
下面給出的是產(chǎn)生與示例輸入和輸出相匹配的結果的答案:
public class EvenAppearBeforeOdd {
static void rearrangeEvenAndOdd(int arr[]) {
int j = 0, temp;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
j++;
}
}
}
static void printArray(int arr[]) {
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+"\t");
System.out.println();
}
public static void main(String args[]) {
int arr[] = { 15, 9, 1, 3, 10, 5, 4, 8 };
System.out.println("Before:");
printArray(arr);
rearrangeEvenAndOdd(arr);
System.out.println("After:");
printArray(arr);
}
}
你可以將你的答案與它進行比較,很容易找到錯誤。如果您仍有任何問題,請隨時發(fā)表評論。
更新 [2019 年 10 月 6 日 19:00]:
為了解決WJS提出的問題,rearrangeEvenAndOdd方法可以寫成:
static void rearrangeEvenAndOdd(int arr[]) {
int j, temp;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0) {
temp = arr[i];
j=i-1;
while(j>=0 && arr[j]%2==1) {
arr[j+1]=arr[j];
j--;
}
arr[j+1]=temp;
}
}
}
但是,它不會生成與示例輸入和輸出匹配的結果,即輸入數(shù)組為 { 15, 9, 1, 3, 10, 5, 4, 8 },結果將生成為 {10, 4, 8 , 15, 9, 1, 3, 5} 而不是您的示例輸出,即 {10, 4, 8, 3, 15, 5, 9, 1}。

TA貢獻1841條經(jīng)驗 獲得超3個贊
如果您必須在算法中不使用任何額外的內(nèi)存,那么我們必須找到一種方法來修復您當前的方法。我認為概念上最簡單的方法是使用重復的空數(shù)組來構建輸出。首先,迭代輸入數(shù)組并復制所有偶數(shù)值。然后,再次迭代并復制所有奇數(shù)值。
static int[] rearrangeEvenAndOdd(int arr[], int n) {
int[] output = new int[n];
int count = 0;
for (int i=0; i < n; ++i) {
if (arr[i] % 2 == 0) output[count++] = arr[i];
}
for (int i=0; i < n; ++i) {
if (arr[i] % 2 == 1) output[count++] = arr[i];
}
return output;
}
public static void main (String[] args) {
int[] arr = { 15, 9, 1, 3, 10, 5, 4, 8 };
System.out.println(Arrays.toString(arr));
arr = rearrangeEvenAndOdd(arr, arr.length);
System.out.println(Arrays.toString(arr));
}
這打?。?/p>
[15, 9, 1, 3, 10, 5, 4, 8]
[10, 4, 8, 15, 9, 1, 3, 5]
請注意,這是一個線性解決方案,需要對輸入數(shù)組進行兩次完整掃描,并且還需要兩倍的輸入存儲空間。

TA貢獻1815條經(jīng)驗 獲得超13個贊
你的語法似乎錯誤。
不確定它是否是勘誤表,但您應該嘗試在編輯器(eclipse)中進行編譯。
它將顯示有關語法的所有錯誤和警告。
System.out.println(arr[]);
System.out.println(EvenAppearBeforeOdd.rearrangeEvenAndOdd(arr);
添加回答
舉報