劍指Offer Java版 面試題21:調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)前面

題目:輸入一個整數(shù)數(shù)組,實現(xiàn)一個函數(shù)來調(diào)整該數(shù)組中數(shù)字的順序,使得所有的奇數(shù)位于數(shù)組的前半部分,所有的偶數(shù)位于數(shù)組的后半部分。

練習地址

劍指 Offer 21. 調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)前面 - 力扣(LeetCode) (leetcode-cn.com)

參考答案

public class Solution {
    public void reOrderArray(int [] array) {
        if (array == null || array.length == 0) {
            return;
        }
        int begin = 0, end = array.length - 1;
        while (begin < end) {
            // 向后移動begin,直到它指向偶數(shù)
            while (begin < end && (array[begin] & 1) > 0) {
                begin++;
            }
            // 向前移動end,直到它指向奇數(shù)
            while (begin < end && (array[end] & 1) == 0) {
                end--;
            }
            if (begin < end) {
                int temp = array[begin];
                array[begin] = array[end];
                array[end] = temp;
            }
        }
    }
}

復雜度分析

  • 時間復雜度:O(n)。
  • 空間復雜度:O(1)。

擴展:輸入一個整數(shù)數(shù)組,實現(xiàn)一個函數(shù)來調(diào)整該數(shù)組中數(shù)字的順序,使得所有的奇數(shù)位于數(shù)組的前半部分,所有的偶數(shù)位于數(shù)組的后半部分,并保證奇數(shù)和奇數(shù),偶數(shù)和偶數(shù)之間的相對位置不變。

練習地址

https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593

參考答案

public class Solution {
    public void reOrderArray(int [] array) {
        int n = array.length;
        int[] aux = new int[n];
        int i = 0;
        for (int j = 0; j < n; j++) {
            if ((array[j] & 1) == 1) {
                if (i != j) {
                    array[i] = array[j];
                }
                i++;
            } else {
                aux[j - i] = array[j];
            }
        }
        for (int j = i; j < n; j++) {
            array[j] = aux[j - i];
        }
    }
}

復雜度分析

  • 時間復雜度:O(n)。
  • 空間復雜度:O(n)。

??劍指Offer Java版目錄
??劍指Offer Java版專題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容