我是一名新程序员,我正在尝试按奇偶校验对整数向量进行排序-将偶数放在赔率前。奇数或偶数内部的顺序本身并不重要。例如,给定输入[3,1,2,4],输出可以是[2,4,3,1]或[4,2,1,3],以此类推。下面是我的c ++代码,有时我幸运的是,向量得到了正确的排序,有时却没有。我导出了奇数和偶数向量,它们看起来正确,但是当我尝试将它们组合在一起时,结果就一团糟。有人可以帮我调试吗?
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& A) {
unordered_multiset<int> even;
unordered_multiset<int> odd;
vector<int> result(A.size());
for(int C:A)
{
if(C%2 == 0)
even.insert(C);
else
odd.insert(C);
}
merge(even.begin(),even.end(),odd.begin(),odd.end(),result.begin());
return result;
}
};
Run Code Online (Sandbox Code Playgroud)
如果您只需要在赔率前加上偶数而不是完整的排序,建议您使用std::partition。您给它两个迭代器和一个谓词。谓词返回的元素true将在其他元素之前出现。它可以就地工作,并且应该非常快。
像这样:
std::vector<int> sortArrayByParity(std::vector<int>& A)
{
std::partition(A.begin(), A.end(), [](int value) { return value % 2 == 0; });
return A;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |