題目:輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。菜鳥思路:
每找到乙個奇數,就往前挪,期間還要把元素往後移,空出位置給這個奇數
高手思路:
雙指標法,乙個游標從前往後遍歷,找到第乙個偶數a,另乙個游標從後往前遍歷,找到第乙個奇數b,交換ab的位置,直到游標重合結束。
劍指offer裡面提到,在判定條件的時候,抽象出來乙個方法,就可以給出一種通用的排序方法
public
int[
]exchange
(int
nums)
// 從後往前找到第乙個奇數
while
((nums[post]%2
==0)&& pre < post)
if(pre != post)
}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 調整陣列順序使奇數字於偶數前面
題目 解題思路 三種方法,暴力解法,首尾雙指標,快慢指標法。第一種暴力解法,通過引入乙個新的陣列用於記錄,從頭開始遍歷整個陣列,奇數從新陣列的開始為存入,偶數從最後一位開始存入,此方法時間和空間複雜度都是o n 演算法效率不是最優。第二種首尾雙指標法,演算法過程 第三種快慢指標法,顧名思義就是通過兩...
面試題21 調整陣列順序使奇數字於偶數前面
輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。示例 輸入 nums 1,2,3,4 輸出 1,3,2,4 注 3,1,2,4 也是正確的答案之一。這應該是最直觀的思路了,即建立兩個列表,之後遍歷nums,所有奇數放入乙個列表,所有...