第一思路使用优先队列priority_queue来模拟小根堆
通过不断pop与push执行到第k次即为目标值
执行思路使用归并思想
class Solution {
public:
vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) {
auto cmp = [&](const pair<int,int>& x,const pair<int,int>& y){
return arr[x.first]*arr[y.second]>arr[x.second]*arr[y.first];
};
priority_queue<pair<int,int>,vector<pair<int,int>>,decltype(cmp)> pq(cmp);
for(int i=1;i<arr.size();++i){
pq.emplace(0,i);//多路归并的思想
}
while(--k){
auto [i,j]=pq.top();
pq.pop();
if(i+1<j){
pq.emplace(i+1,j);
}
}
//auto [i,j] = pq.top();
return {arr[pq.top().first], arr[pq.top().second]};
}
};