LeetCode_Nov_5th_Week

Posted KuoGavin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode_Nov_5th_Week相关的知识,希望对你有一定的参考价值。

November 29th : 786. 第 K 个最小的素数分数


November 29th : 786. 第 K 个最小的素数分数

class Solution 
public:
    vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) 
        int n = arr.size();
        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)> q(cmp);
		//初始化优先队列中的元素,将n-1个列表中的元素加入到优先队列中去 
        for (int j = 1; j < n; ++j) q.emplace(0, j);
		//从优先队列中依次取出最小值,并加入相应列表中的次小值,循环k次,优先队列的头即为所求
        for (int _ = 1; _ < k; ++_) 
            auto [i, j] = q.top();
            q.pop();
            if (i + 1 < j) q.emplace(i + 1, j);
        
        return arr[q.top().first], arr[q.top().second];
    
;
/********************************************************************************************/
//brutal force. 超时
class Solution 
public:
    vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) 
        unordered_map<float, vector<int>> mp;
        priority_queue<float, vector<float>, greater<float>> pq;
        for(int i = 0; i < arr.size(); ++i) 
            for(int j = i+1; j < arr.size(); ++j) 
                float frac = (float)arr[i] / (float)arr[j];
                pq.push(frac);
                mp[frac] = arr[i], arr[j];
            
        
        while(k-- != 1) cout << pq.top() << endl; pq.pop();;
        return mp[pq.top()];
    
;

以上是关于LeetCode_Nov_5th_Week的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode_Nov_3rd_Week

LeetCode_Nov_1st_Week

LeetCode_Nov_2nd_Week

这些 C++ 代码片段有啥作用?

[AndroidStudio]_[初级]_[配置自动完成的代码片段]

VSCode 配置 用户自定义代码片段 自定义自动代码补充