按奇偶排序數組II
一、LeetCode題解
瞧一瞧~
- 博健的LeetCode題解:Gitbook版本傳送門
- 博健的LeetCode題解:CSDN傳送門
- 有趣的CSS:Gitbook傳送門
- 前端進階筆記:Gitbook傳送門
做題路線( ** =當前階段)
- 階段一(解題總數,單題題解數至上)**
- 階段二(解題質量至上)
- 階段三(算法思想至上)
二、算法題
題目
給定一個非負整數數組 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;
};