https://leetcode.cn/problems/k-th-smallest-prime-fraction/
如果用vector会超时,另外第一次写的时候瞎猜的贪心+堆 不行。。还是不要只猜一下。。
// bool cmp(vector<int>&a,vector<int>&b){
// return a[0] * b[1] > b[0] * a[1];
// }
class Solution {
public:
vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) {
auto cmp = [&](pair<int,int>&a,pair<int,int>&b) {
return arr[a.first] * arr[b.second] > arr[b.first] * arr[a.second];
};
priority_queue<pair<int,int>, vector<pair<int,int>>, decltype(cmp)>q(cmp); // 小顶堆
int del_cnt = 0, n = arr.size();
pair<int,int> ans;
for(int i = 1; i < arr.size(); i++) {
q.push(make_pair(0, i));
}
while(q.size()) {
pair<int,int>top = q.top();
q.pop();
del_cnt++;
if(del_cnt == k) {
ans = top;
break;
}
// cout << del_cnt << endl;
if(top.first+1 < n && top.first+1 < top.second) {
q.push(make_pair(top.first+1, top.second));
}
}
return vector<int>{arr[ans.first], arr[ans.second]};
}
};