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

2022-07-27 11:45:12 字數 1162 閱讀 4829

【題目描述】

輸入乙個整數陣列,實現乙個函式來呼叫該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。

【解決方案】

1. 只完成基本功能的解法,僅適用於初級程式設計師

方法:設定頭尾兩個指標,滿足條件就交換,直到碰頭為止。

我的**實現,僅供參考:

1

public

static

void adjustarray(int

arr)27

8int start = 0;9

int end = arr.length - 1;10

11while (start 1217

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

))19

2223

if (start 2427}28

}2930public

static

void swap(int arr, int indexa, int

indexb)

31

2. 考慮可拓展性的解法,能秒殺offer

在上述問題中,只是要求奇數偶數分開,如果正數負數分開呢?按照是否能被3整除分開呢?

所以,我可以把判斷分類的條件抽離出來,單獨形成乙個判定條件的函式,哪怕以後改了需求,也只需找到對應函式修改即可。

我的**實現,僅供參考:

1

public

static

void adjustarray(int

arr)27

8int start = 0;9

int end = arr.length - 1;10

11while (start 1217

18while ((start < end) &&isvalid(arr[end]))

1922

23if (start 2427}28

}2930public

static

bool isvalid(int

num)

3134

35public

static

void swap(int arr, int indexa, int

indexb)

36

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

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

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

這個題目要求把奇數放在陣列的前半部分,偶數放在陣列的後半部分,因此所有的奇數應該位於偶數的前面。也就是說我們在掃瞄這個陣列的時候,如果發現有偶數出現在奇數的前面,我們可以交換它們的順序,交換之後就符合要求了。因此我們可以維護兩個指標,第乙個指標初始化時指向陣列的第乙個數字,它只向後移動 第二個指標初...

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

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