題目
解題思路
三種方法,暴力解法,首尾雙指標,快慢指標法。
第一種暴力解法,通過引入乙個新的陣列用於記錄,從頭開始遍歷整個陣列,奇數從新陣列的開始為存入,偶數從最後一位開始存入,此方法時間和空間複雜度都是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...