「算法」按奇偶排序數組 & 按奇偶排序數組II

00905 按奇偶排序數組

題目描述

給定一個非負整數數組 A,返回一個數組,在該數組中 A 的全部偶數元素以後跟着全部奇數元素。java

你能夠返回知足此條件的任何數組做爲答案。數組

示例:bash

輸入:[3,1,2,4]
輸出:[2,4,3,1]
輸出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也會被接受。 

提示:微信

  • 1 <= A.length <= 5000
  • 0 <= A[i] <= 5000

力扣地址

解題報告

兩遍掃描

本題解由微信公衆號 小猿刷題提供, 錯誤之處, 歡迎指正.

第一遍掃描輸出偶數, 第二遍掃描輸出奇數.spa

/**
 * 微信公衆號"小猿刷題"
 */
class Solution {
    public int[] sortArrayByParity(int[] A) {
        int[] list = new int[A.length];
        int t = 0;
        for (int i = 0; i < A.length; i++) {
             if (A[i] % 2 == 0){
                 list[t++] = A[i];
             }
                
        }
        for (int i = 0; i < A.length; i++) {
             if (A[i] % 2 == 1){
                 list[t++] = A[i];
             }
                
        }
        return list;
    }
}

偶數交換

本題解由微信公衆號 小猿刷題提供, 錯誤之處, 歡迎指正.

遍歷數組,將全部偶數元素依次交換到數組前列.指針

/**
 * 微信公衆號"小猿刷題"
 */
class Solution {
    public static int[] sortArrayByParity(int[] A) {
        int offset = 0;
        for(int i = 0; i < A.length; i++){
            if(A[i] % 2 == 0){
                swap(A, i, offset++);
            }
        }
        return A;
    }
    
    public static void swap(int[] arr, int left, int right){
        int tmp = arr[left];
        arr[left] = arr[right];
        arr[right] = tmp;
    } 
}

原地快排

本題解由微信公衆號 小猿刷題提供, 錯誤之處, 歡迎指正.
  • 定義兩個指針分別從高位(尋找偶數元素)和低位(尋找奇數元素)掃描. 尋找到交換位置.
/**
 * 微信公衆號"小猿刷題"
 */
class Solution {
    
    public static int[] sortArrayByParity(int[] A) {
        int left = 0;
        int right = A.length - 1;
        while(left < right){
            // 遍歷直到第一個偶數跳出
            while(left < right && A[right] % 2 != 0){
                right --;
            }
            // 遍歷直到第一個奇數跳出
            while(left < right && A[left] % 2 == 0){
                left ++;
            }
            swap(A, left, right);
        }
        return A;
    }
    
    public static void swap(int[] arr, int left, int right){
        int tmp = arr[left];
        arr[left] = arr[right];
        arr[right] = tmp;
    } 
}

小猿刷題

00922 按奇偶排序數組 II

題目描述

給定一個非負整數數組 AA 中一半整數是奇數,一半整數是偶數。對數組進行排序,以便當 A[i] 爲奇數時,i 也是奇數;當 A[i] 爲偶數時, i 也是偶數。code

你能夠返回任何知足上述條件的數組做爲答案。排序

示例:leetcode

輸入:[4,2,5,7]
輸出:[4,5,2,7]
解釋:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也會被接受。

提示:rem

  • 2 <= A.length <= 20000
  • A.length % 2 == 0
  • 0 <= A[i] <= 1000

力扣地址

<!-- more -->

解題報告

本題解由微信公衆號 小猿刷題提供, 錯誤之處, 歡迎指正.
  • 定義兩個指針,分別記錄偶數和奇數元素的位置.
  • 遍歷數組把全部的偶數放進 ans[0]ans[2]ans[4],奇數放進 ans[1]ans[3]ans[5],依次類推.
/**
 * 微信公衆號"小猿刷題"
 */
class Solution {
    public int[] sortArrayByParityII(int[] A) {
        int[] list = new int[A.length];
        int i = 0;
        int j = 1;
        for (int x: A) {
            if (x % 2 == 0) {
                list[i] = x;
                i += 2;
            }
            if (x % 2 == 1) {
                list[j] = x;
                j += 2;
            }
        }
        return list;
    }
}

小猿刷題

相關文章
相關標籤/搜索