Skip to content

Commit 4573bfd

Browse files
committed
Add 0905 README.md
1 parent 11916e0 commit 4573bfd

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# 按奇偶排序数组
2+
3+
### 题目描述
4+
5+
给定一个非负整数数组 `A`,返回一个由 `A` 的所有偶数元素组成的数组,后面跟 `A` 的所有奇数元素。
6+
7+
你可以返回满足此条件的任何数组作为答案。
8+
9+
**示例**
10+
11+
```
12+
输入:[3,1,2,4]
13+
输出:[2,4,3,1]
14+
输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。
15+
```
16+
17+
**提示**
18+
19+
1. `1 <= A.length <= 5000`
20+
2. `0 <= A[i] <= 5000`
21+
22+
### 解法
23+
24+
官方题解缺失
25+
26+
**第一种解法**
27+
28+
**思路**
29+
30+
将数组`A`中的奇数和偶数都分别的提取到一个数组中,最后进行合并数组操作。
31+
32+
**算法**
33+
34+
```javascript
35+
var sortArrayByParity = function (A) {
36+
const len = A.length;
37+
if (len === 1) return A;
38+
let evenNumber = [], oddNumber = [];
39+
for (let i = 0; i < len; i++) {
40+
if (A[i] % 2 === 0) {
41+
evenNumber.push(A[i]);
42+
} else {
43+
oddNumber.push(A[i]);
44+
}
45+
}
46+
return evenNumber.concat(oddNumber);
47+
};
48+
```
49+
50+
**复杂度分析**
51+
52+
暂无
53+
54+
**第二种解法**
55+
56+
**思路**
57+
58+
利用数组实现一个特殊的队列,队列两头都可以进,前面进偶数,后面进奇数。
59+
60+
**算法**
61+
62+
```javascript
63+
var sortArrayByParity = function (A) {
64+
const len = A.length;
65+
if (len === 1) return A;
66+
let eoNum = [];
67+
A.forEach((item, index, array) => {
68+
if (item % 2 === 1) {
69+
eoNum.push(item);
70+
} else {
71+
eoNum.unshift(item);
72+
}
73+
});
74+
return eoNum;
75+
};
76+
```
77+
78+
**复杂度分析**
79+
80+
暂无
81+
82+
**第三种解法**
83+
84+
**思路**
85+
86+
利用双指针`i``j``i`指向数组的开始,`j`指向数组的末尾,当`i` <`j`时,比较`A[i]``A[j]`,若`i`指向的为奇数,`j`指向的为偶数,交换`A[i]``A[j]``i`加一,`j`减一。若`A[i]`为偶数,`i`加一,不进行交换。若`A[j]`为奇数,`j`减一,不进行交换。
87+
88+
**算法**
89+
90+
```javascript
91+
// 第一种思路
92+
var sortArrayByParity = function (A) {
93+
const len = A.length;
94+
if (len === 1) return A;
95+
let i = 0, j = len - 1;
96+
while (i < j) {
97+
if ((A[i] % 2 === 1) && (A[j] % 2 === 0)) {
98+
let temp = A[j];
99+
A[j--] = A[i];
100+
A[i++] = temp;
101+
}
102+
if (A[i] % 2 === 0) i++;
103+
if (A[j] % 2 === 1) j--;
104+
}
105+
return A;
106+
};
107+
// 第二种思路
108+
var sortArrayByParity = function (A) {
109+
const len = A.length;
110+
if (len === 1) return A;
111+
let i = 0, j = len - 1;
112+
while (i < j) {
113+
while ( A[i] % 2 === 0 ) i++;
114+
while ( A[j] % 2 === 1 ) j--;
115+
while( i < j && (A[i] % 2 === 1) && (A[j] % 2 === 0) ){
116+
let temp = A[j];
117+
A[j--] = A[i];
118+
A[i++] = temp;
119+
}
120+
}
121+
return A;
122+
};
123+
```
124+
125+
**复杂度分析**
126+
127+
暂无

0 commit comments

Comments
 (0)