面試題14:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得全部奇數位於數組的前半部分,全部偶數位於數組的後半部分。面試
擴展要求:並保證奇數和奇數,偶數和偶數之間的相對位置不變。數組
雙指針碰撞法bash
在數據結構爲數組的場景,常常會使用到雙指針碰撞法來解決移動替換數組元素的問題。數據結構
場景1:頭尾雙指針碰撞法
對數組設置一個頭指針和尾指針,相對而行,遍歷整個數組,直到碰撞:head > tail, 跳出循環遍歷。
場景2:頭指針和中間指針齊頭並進法(自創詞彙方便記憶),如打印鏈表倒數第K個節點。
場景n:遇到再補
複製代碼
本題採用頭尾雙指針碰撞法。函數
public class Solution {
public void reOrderArray(int [] array) {
if(array == null && array。length == 0){
throw new NullPointerException();
}
int head = 0;
int tail = array.length - 1;
while(head < tail){
while((head < tail) && ((array[head] & 1) == 1)) {
head ++;
}
while((head < tail) && ((array[tail] & 1) == 0)) {
tail --;
}
if(head < tail) {
int tmp = array[head];
array[head] = array[tail];
array[tail] = tmp;
}
}
}
}
複製代碼
待補充
複製代碼
待補充spa