LeetCode題解 => 922.按奇偶排序數組II(六十八)

按奇偶排序數組II

一、LeetCode題解

瞧一瞧~
做題路線( ** =當前階段)
  • 階段一(解題總數,單題題解數至上)**
  • 階段二(解題質量至上)
  • 階段三(算法思想至上)

二、算法題

題目

給定一個非負整數數組 A, A 中一半整數是奇數,一半整數是偶數。

對數組進行排序,以便當 A[i] 爲奇數時,i 也是奇數;當 A[i] 爲偶數時,i 也是偶數。

📌你可以返回滿足此條件的任何數組作爲答案。

示例:

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

提示:

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

解法一(兩次掃描)

  • 創建新數組用於保存結果,聲明一個變量記錄下標
  • 💡第一次掃描偶數,保存在偶數下標位置
  • 💡第二次掃描基數,保存在奇數下標位置
  • 時間複雜度O(N)——遍歷了2次數組
  • 空間複雜度O(N)——一個新數組
var sortArrayByParityII = function(A) {
    var index = 0
    var res = []
    A.forEach(item => {
        if(item % 2 === 0){
            res[index] = item
            index+=2
        }
    });
    index = 1;// 初始化奇數下標
    A.forEach(item => {
        if(item % 2 !== 0){
            res[index] = item
            index+=2
        }
    });
    return res;
};

在這裏插入圖片描述

解法二(一遍掃描)

  • 創建新數組用於保存結果,聲明2變量記錄下標
  • 掃描一次
  • 🚨下標間隔爲2
var sortArrayByParity = function(A) {
    var left = 0,right = A.length-1;
    var res = []
    A.forEach(item => {
        if(item % 2 === 0){
            res[left++] = item
        }else{
            res[right--] = item
        }
    });
    return res;
};

在這裏插入圖片描述

發佈了251 篇原創文章 · 獲贊 31 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章