c++STL库——优先队列
题目:2099. 找到和最大的长度为 K 的子序列
找到和最大的长度为 K 的子序列
本题采用c++STL库函数中的优先队列非常简单。
相关知识
1.priority_queue<Type, Container, Functional>
其中,Type 为数据类型,Container 为容器类型(Container必须是用数组实现的容器,比如vector,deque等,不能用 list。STL里面默认用的是vector),Functional为比较的方式。
2.升序队列,小顶堆,先弹小的元素出来:priority_queue <int,vector,greater > q;
降序队列,大顶堆,先弹大的元素出来:priority_queue <int,vector, less > q;
思路
将数值,下标存入降序队列
再将其存入升序队列
此时再存入数值中。
三步完美达成题目要求
有pair型同时存入下标和数值
在队列内进行排序操作时,pair起作用的是first
代码
class Solution {
public:
vector<int> maxSubsequence(vector<int>& nums, int k) {
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
priority_queue<pair<int,int>>qvalue;
vector<int>ans;
for(int i=0;i<nums.size();i++)
{
qvalue.push({nums[i],i});
}
for(int i=0;i<k;i++)
{
q.push({qvalue.top().second,qvalue.top().first});
qvalue.pop();
}
for(int i=0;i<k;i++)
{
ans.push_back(q.top().second);
q.pop();
}
return ans;
}
};