给你一个二维数组(有K行),每一行都已经按升序排列。
请你将所有行合并到一个升序数组中,返回合并后的数组。
本题是LeetCode 合并K个升序链表的变形
采用小顶堆存放每一行的第一个元素,每一行的下标index会依次往后移动。这里直接使用C++ STL 的priority_queue来实现小顶堆。
#include#include #include using namespace std; struct Node { int val; int i; int j; bool operator < (const Node& a) const { return this->val > a.val; } }; vector mergeKSortedVector(vector >& inputs) { int m = inputs.size(), n = inputs[0].size(); if (m <= 1) return inputs[0]; priority_queue que; for (int i = 0; i < m; i++) { que.push({inputs[i][0], i, 0}); } vector ret; while (!que.empty()) { Node top = que.top(); que.pop(); ret.push_back(top.val); if (top.j + 1 < n) que.push({inputs[top.i][top.j + 1], top.i, top.j + 1}); } return ret; } int main() { vector > inputs = {{1,3,5},{2,4,6},{7,11,29}}; vector ret = mergeKSortedVector(inputs); cout << ret.size() << endl; for (auto num : ret) { cout << num << " "; } return 0; }



