std::vector<int> arr = {2,1,3,4,5};
middle_big_sort(arr);
在排序之后
arr == {2,4,5,3,1}
我的解决方案是:
std::vector<int> middle_big_sort(const std::vector<int>& arr) {
std::vector<int> temp1 = arr;
std::vector<int> temp2 = arr;
std::vector<int> ret;
std::sort(temp2.begin(), temp2.end());
std::sort(temp1.begin(), temp1.end(), std::less<int>());
temp1.insert(temp1.end(), temp2.begin(), temp2.end());
ret.reserve(arr.size());
for (int i = 0; i < temp1.size(); i+=2) {
ret.push_back(temp1[i]);
}
return ret;
}
有没有更快的方法?
发布于 2021-04-11 17:19:16
我想您可以尝试这样的方法来防止某些复制和排序操作。
auto middle_big_sort(std::vector<int> arr) -> decltype(arr) {
decltype(arr) ret(arr.size());
std::sort(arr.begin(), arr.end());
arr.push_back(arr.back()); // prevents messing with boundaries in loop
for (int i = 0; i < ret.size() / 2 + 1; i++) {
ret[ret.size() - i - 1] = arr[i * 2];
ret[i] = arr[i * 2 + 1];
}
return ret;
}
但肯定有更多的最优解决方案。
https://stackoverflow.com/questions/67042202
复制相似问题