Array-905. Sort Array By Parity

題目:
非負數(shù)組A包含偶數(shù)和奇數(shù),將所有奇數(shù)排列在所有偶數(shù)后邊

例子:
Input: [3,1,2,4]Output: [2,4,3,1]The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted.

想法:本來想用一個標志位p來標識最后一個偶數(shù),如果再遍歷到偶數(shù)則和標志位下一位的奇數(shù)交換,這樣,時間復(fù)雜度為O(n),空間復(fù)雜度為O(1);但是仔細推敲是有問題的。

最后用了最笨的方法,即遍歷找到偶數(shù)和奇數(shù),再拼接起來,程序如下:

class Solution {
    public int[] sortArrayByParity(int[] A) {
        if(A.length<=0||A==null)return null;
        int length=A.length;
        int n=0;
        for(int i=0;i<length;i++){
            if(A[i]%2==0){
                n++;
            }
        }
        int[] AParity=new int[n];
        int[] BOdd=new int[length-n];
        int j=0;
        int i=0;
        int z=0;
        int m=0;
        while (j<length){
            if(A[j]%2==0){
                AParity[i]=A[j];
                i++;
            }else {
                BOdd[z]=A[j];
                z++;
            }
            j++;
        }
        while (m<length){
            if(m<n){
                A[m]=AParity[m];
            }
            else{
                A[m]=BOdd[m-n];
            }
            m++;
        }
        return A;
    }
}

這樣可以實現(xiàn),但是過于繁復(fù),25ms的通過時間??戳舜笊駛兊慕獯穑械莫毐脔鑿?,有的跟我的想法一樣,但更簡單。我與大神只差10000步。

神1:用是否為偶數(shù)重寫Arrays的排序算法

class Solution {
    public int[] sortArrayByParity(int[] A) {
        Integer[] B = new Integer[A.length];
        for (int t = 0; t < A.length; ++t)
            B[t] = A[t];
        Arrays.sort(B, (a, b) -> Integer.compare(a%2, b%2));
        for (int t = 0; t < A.length; ++t)
            A[t] = B[t];
        return A;
        /* Alternative:
        return Arrays.stream(A)
                     .boxed()
                     .sorted((a, b) -> Integer.compare(a%2, b%2))
                     .mapToInt(i -> i)
                     .toArray();
        */
    }
}

鑒于比較函數(shù) Integer.compare還沒搞懂,現(xiàn)在無法驗證這種方法。

神2:遍歷兩遍A[n],找到奇偶數(shù)放到另一個數(shù)組中

class Solution {
    public int[] sortArrayByParity(int[] A) {
        int[] ans = new int[A.length];
        int t = 0;
        for (int i = 0; i < A.length; ++i)
            if (A[i] % 2 == 0)
                ans[t++] = A[i];
        for (int i = 0; i < A.length; ++i)
            if (A[i] % 2 == 1)
                ans[t++] = A[i];
        return ans;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容