请用最小优先队列写出将两个无序数组合并成一个升序数组使用c++
时间: 2024-10-20 16:13:43 浏览: 35
要使用最小优先队列(通常称为二叉堆,因为它们通常是基于树的数据结构)来合并两个无序数组并得到一个升序结果,我们可以创建两个堆,一个代表第一个数组,另一个代表第二个数组。每次从每个堆顶取出最小元素进行比较并放入新数组,直到其中一个堆为空。以下是C++实现的一个简单版本:
```cpp
#include <vector>
#include <queue>
std::vector<int> mergeTwoArrays(std::vector<int>& nums1, std::vector<int>& nums2) {
std::priority_queue<int, std::vector<int>, std::greater<int>> pq1(nums1.begin(), nums1.end());
std::priority_queue<int, std::vector<int>, std::greater<int>> pq2(nums2.begin(), nums2.end());
std::vector<int> merged;
while (!pq1.empty() && !pq2.empty()) {
if (pq1.top() <= pq2.top()) {
merged.push_back(pq1.top());
pq1.pop();
} else {
merged.push_back(pq2.top());
pq2.pop();
}
}
// 如果还有剩余元素,直接添加到结果数组
while (!pq1.empty()) {
merged.push_back(pq1.top());
pq1.pop();
}
while (!pq2.empty()) {
merged.push_back(pq2.top());
pq2.pop();
}
return merged;
}
阅读全文