这题我简单的借鉴905. Sort Array By Parity 的想法那两个vector临时存储even和odd再合并,可惜这样就慢了,88ms(43%)
vector<int> sortArrayByParityII(vector<int>& A) {
size_t size = A.size();
vector<int> odd, even, vec;
for (auto iter = A.begin(); iter != A.end(); ++iter)
if ((*iter) % 2 == 0) //even
even.push_back(*iter);
else
odd.push_back(*iter);
for (int i = 0; i < size; ++i)
if (i % 2 == 0)
{
auto e = *(--even.end());
vec.push_back(e);
even.pop_back();
}
else
{
auto e = *(--odd.end());
vec.push_back(e);
odd.pop_back();
}
return vec;
}
参考最快的,不需要先分开存储再合并,直接转存入一个新vector即可。
vector<int> sortArrayByParityII(vector<int>& A) {
int o = 1, e = 0;
vector<int> out(A.size());
for (int i = 0 ; i < A.size(); i++){
if (A[i] % 2) { //odd
out[o] = A[i];
o+=2;
}
else{
out[e] = A[i];
e+=2;
}
}
return out;
}