0
私はこのleetcode questionを見て、ベクトル(O(nk)の代わりにO(nlogk))の代わりに優先度のキューでそれを解決したいと考えました。 priority_queueを、指定されたベクターで基になるコンテナとして初期化するにはどうすればよいですか?これは私が試みたものですが、コンパイルされないため、docsを誤解しました。priority_queueをベクトルから移動初期化しますか?
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class cmp{
public:
bool operator()(const ListNode *a,const ListNode *b) const {
if(b==nullptr) return false;
return a==nullptr || a->val>b->val;
}
};
class Solution {
ListNode* helper(auto& lists) {
ListNode *ans=lists.top();lists.pop();
if(ans==nullptr) return nullptr;
lists.push(ans->next);
ans->next=helper(lists);
return ans;
}
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.empty()) return nullptr;
priority_queue<ListNode*,vector<ListNode*>> pq(cmp,std::move(lists)); //compiler says error: 'std::move' is not a type
return helper(pq);
}
};
通常、コンパイルされないコードがある場合は、コンパイルエラーを投稿に追加することをお勧めします。異なるコンパイラ(gccとclangなど)を試して両方のエラーをポストすると、ボーナスポイントになります。 –