面試題14 調整陣列順序使奇數字於偶數前面

2021-08-02 19:00:33 字數 1196 閱讀 6218

這個題目要求把奇數放在陣列的前半部分, 偶數放在陣列的後半部分,因此所有的奇數應該位於偶數的前面。也就是說我們在掃瞄這個陣列的時候, 如果發現有偶數出現在奇數的前面,我們可以交換它們的順序,交換之後就符合要求了。

因此我們可以維護兩個指標,第乙個指標初始化時指向陣列的第乙個數字,它只向後移動:第二個指標初始化時指向陣列的最後乙個數字, 它只向前移動。在兩個指標相遇之前,第乙個指標總是位於第二個指標的前面。如果第乙個指標指向的數字是偶數,並且第二個指標指向的數字是奇數,我們就交換這兩個數字。

**醜陋:

public

class solution

intleft = 0;

intright = array.length - 1;

while(left

<= right) else

} else else }}

}}

優化一下:

public

class

test14

// 從左向右記錄偶數的位置

int start = 0;

// 從右向左記錄奇數的位置

int end = arr.length - 1;

// 開始調整奇數和偶數的位置

while (start < end)

// 找奇數

while (start < end && arr[end] % 2 == 0)

// 找到後就將奇數和偶數交換位置

// 對於start=end的情況,交換不會產生什麼影響

// 所以將if判斷省去了

int tmp = arr[start];

arr[start] = arr[end];

arr[end] = tmp;}}

/*** 輸出陣列的資訊

**@param arr 待輸出陣列

*/public

static

void

printarray(int arr)

system.out.println();}}

public

static

void

main(string args) ;

reorderoddeven(array);

printarray(array);

}}

面試題14 調整陣列順序使奇數字於偶數前面

最簡單的辦法就是開闢和原陣列同樣大小的空間,順次掃瞄原陣列2次,第一次將所有奇數放進新陣列中,第二次將偶數放入就可以。這種方法的時間複雜度為o n 空間複雜度為o n 如下 void reorderoddeven vector arr vectornewarr int i for i 0 i以上演算...

面試題14 調整陣列順序使奇數字於偶數前面

題目 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,是的所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。初級程式設計師 1 void reorderoddeven vector data 218 19 可擴充套件性解法 將判斷標準變成乙個函式指標 1 bool iseven int...

面試題14 調整陣列順序使奇數字於偶數前面

題目描述 輸入乙個整數陣列,實現乙個函式來呼叫該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。解決方案 1.只完成基本功能的解法,僅適用於初級程式設計師 方法 設定頭尾兩個指標,滿足條件就交換,直到碰頭為止。我的 實現,僅供參考 1 public static voi...