劍指Offer題目14:調整數組順序使奇數位於偶數前面(Java)

面試題14:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得全部奇數位於數組的前半部分,全部偶數位於數組的後半部分。面試

擴展要求:並保證奇數和奇數,偶數和偶數之間的相對位置不變。數組

Basic

雙指針碰撞法bash

在數據結構爲數組的場景,常常會使用到雙指針碰撞法來解決移動替換數組元素的問題。數據結構

場景1:頭尾雙指針碰撞法

對數組設置一個頭指針和尾指針,相對而行,遍歷整個數組,直到碰撞:head > tail, 跳出循環遍歷。

場景2:頭指針和中間指針齊頭並進法(自創詞彙方便記憶),如打印鏈表倒數第K個節點。

場景n:遇到再補
複製代碼

解題思路

本題採用頭尾雙指針碰撞法。函數

代碼實現

  1. 不考慮移位後的相對位置
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;
            }
        }
    }
}
複製代碼

  1. 考慮移位後的相對順序
待補充
複製代碼

總結

待補充spa

相關文章
相關標籤/搜索