今天心情由特别烂转变为特别好!!!所以决定写一篇,是实验室里做东西用到的~~
标题起的不好哈~以下代码的意思就是:合并多个有序数组,由小到大不重复地输出里面的元素值。实现的方法是将这些数组合并建最小堆,每次弹出堆顶。
具体算法:
1、将每个数组的第一个元素保存到堆中,并记录其来自哪个数组。整理堆。
2、如果堆不为空且数组没有遍历完,弹出堆顶。否则转5。
3、如果弹出的值等于上一次弹出的值last_data,将该值所在数组的下一个元素读入堆,整理堆并转2。否则转4。
4、将该值输出,将该值所在数组的下一个元素读入堆,整理堆并转2。
5、结束。
C++代码如下:
定义heap_item类:
class heap_item
{
public:
int data;
int array_id;
heap_item(int d, int i)
{
data = d;
array_id = i;
}
heap_item(const heap_item &i)
{
data = i.data;
array_id = i.array_id;
}
};定义multi_heap类:
class multi_heap
{
private:
vector<heap_item> h;
vector<vector<int> *> header;
vector<int> ptr;
int vec_num;
int last_data;
public:
multi_heap(){vec_num=0;last_data=-1;}
~multi_heap(){}

本文介绍了一种使用C++合并多个有序数组的方法,通过建立最小堆,逐个弹出堆顶元素实现升序且不重复的输出。详细步骤包括初始化堆,比较堆顶元素与上次弹出值,输出元素并更新堆。提供的代码实现了这一过程。
最低0.47元/天 解锁文章
1481

被折叠的 条评论
为什么被折叠?



