-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsort_array_parity.js
50 lines (44 loc) · 1.22 KB
/
sort_array_parity.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* @param {number[]} A
* @return {number[]}
*/
var sortArrayByParityII = function(A) {
let evens = [], odds = [];
sortArray(A, evens, odds);
if(A.includes(-1) || A.includes(-2))
sortArray(A, evens, odds);
return A;
};
let sortArray = (A, evens, odds) => {
for(let i = 0; i < A.length; i++) {
if(i % 2 === 0) {
if(A[i] % 2 !== 0) {
odds.push(A[i]);
if(evens.length !== 0) {
A[i] = evens[evens.length - 1];
evens.pop();
} else
A[i] = -2;
} else {
if(A[i] === -2) {
A[i] = evens[evens.length - 1];
evens.pop();
}
}
} else {
if(A[i] % 2 === 0) {
evens.push(A[i]);
if(odds.length !== 0) {
A[i] = odds[odds.length - 1];
odds.pop();
} else
A[i] = -1;
} else {
if(A[i] === -1) {
A[i] = odds[odds.length - 1];
odds.pop();
}
}
}
}
}