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

2021-10-07 03:28:45 字數 1177 閱讀 2303

題目

解題思路

三種方法,暴力解法,首尾雙指標,快慢指標法。

第一種暴力解法,通過引入乙個新的陣列用於記錄,從頭開始遍歷整個陣列,奇數從新陣列的開始為存入,偶數從最後一位開始存入,此方法時間和空間複雜度都是o(n),演算法效率不是最優。

第二種首尾雙指標法,演算法過程:

第三種快慢指標法,顧名思義就是通過兩個指標來實現,兩個指標都從頭開始往後,快指標往後找奇數,慢指標往後找偶數,當找到時就將二者交換,直到快指標到陣列的最後位置為止。

時間複雜度:o(n),空間複雜度:o(10).

**

class

solution

return newnums;

}/************************ 首尾雙指標 ***************************/

public

int[

]exchange1

(int

nums)

return nums;

}public

void

swap

(int

nums,

int i,

int j)

/********************* 快慢指標法 ************************/

public

int[

]exchange3

(int

nums)

fast++;}

return nums;

}}

變換

通過變換一下本題,改變題意:使得索引為奇數的元素在陣列的前半部分,索引為偶數的在陣列後面。演算法還是類似,通過雙指標實現。

/******** 奇數字的數(索引為奇數)在陣列前面,偶數字的數(索引為偶數)在陣列後面 *********/

public

int[

]exchange2

(int

nums)

return nums;

}

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

題目 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。示例 輸入 nums 1,2,3,4 輸出 1,3,2,4 注 3,1,2,4 也是正確的答案之一。1 nums.length 50000 1 nums i 10000 解題思路...

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

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。示例 輸入 nums 1,2,3,4 輸出 1,3,2,4 注 3,1,2,4 也是正確的答案之一。這應該是最直觀的思路了,即建立兩個列表,之後遍歷nums,所有奇數放入乙個列表,所有...

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

題目 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。i o描述 void test1 test test1 numbers,sizeof numbers sizeof int void test2 test test2 numbe...