@@ -7,11 +7,10 @@ class Solution {
7
7
vector<int > sortEvenOdd (vector<int >& nums) {
8
8
const auto & partition = [](const auto & index, vector<int > *nums) {
9
9
for (int i = 0 ; i < size (*nums); ++i) {
10
- int j = index (i);
11
- while ((*nums)[i] > 0 ) {
12
- swap ((*nums)[i], (*nums)[j]);
13
- (*nums)[j] = ~(*nums)[j]; // visited
10
+ int j = i;
11
+ while ((*nums)[i] >= 0 ) {
14
12
j = index (j);
13
+ tie ((*nums)[i], (*nums)[j]) = pair ((*nums)[j], ~(*nums)[i]);
15
14
}
16
15
}
17
16
for (auto & x : (*nums)) {
@@ -46,12 +45,11 @@ class Solution {
46
45
if ((*nums)[i] < 0 ) { // processed
47
46
continue ;
48
47
}
49
- while (i != left + count[ (*nums)[i]] - 1 ) {
48
+ while ((*nums)[i] >= 0 ) {
50
49
--count[(*nums)[i]];
51
- tie ((*nums)[left + count[(*nums)[i]]], (*nums)[i]) = pair (~(*nums)[i], (*nums)[left + count[(*nums)[i]]]);
50
+ const int j = left + count[(*nums)[i]];
51
+ tie ((*nums)[i], (*nums)[j]) = pair ((*nums)[j], ~(*nums)[i]);
52
52
}
53
- --count[(*nums)[i]];
54
- (*nums)[i] = ~(*nums)[i];
55
53
}
56
54
for (int i = left; i <= right; ++i) {
57
55
(*nums)[i] = ~(*nums)[i]; // restore values
@@ -70,11 +68,10 @@ class Solution2 {
70
68
vector<int > sortEvenOdd (vector<int >& nums) {
71
69
const auto & partition = [](const auto & index, vector<int > *nums) {
72
70
for (int i = 0 ; i < size (*nums); ++i) {
73
- int j = index (i);
74
- while ((*nums)[i] > 0 ) {
75
- swap ((*nums)[i], (*nums)[j]);
76
- (*nums)[j] = ~(*nums)[j]; // processed
71
+ int j = i;
72
+ while ((*nums)[i] >= 0 ) {
77
73
j = index (j);
74
+ tie ((*nums)[i], (*nums)[j]) = pair ((*nums)[j], ~(*nums)[i]);
78
75
}
79
76
}
80
77
for (auto & x : (*nums)) {
0 commit comments