第一思路使用优先队列priority_queue来模拟小根堆
    通过不断pop与push执行到第k次即为目标值
    执行思路使用归并思想

    786.第k个最小素数分数

    1. class Solution {
    2. public:
    3. vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) {
    4. auto cmp = [&](const pair<int,int>& x,const pair<int,int>& y){
    5. return arr[x.first]*arr[y.second]>arr[x.second]*arr[y.first];
    6. };
    7. priority_queue<pair<int,int>,vector<pair<int,int>>,decltype(cmp)> pq(cmp);
    8. for(int i=1;i<arr.size();++i){
    9. pq.emplace(0,i);//多路归并的思想
    10. }
    11. while(--k){
    12. auto [i,j]=pq.top();
    13. pq.pop();
    14. if(i+1<j){
    15. pq.emplace(i+1,j);
    16. }
    17. }
    18. //auto [i,j] = pq.top();
    19. return {arr[pq.top().first], arr[pq.top().second]};
    20. }
    21. };