870. Advantage Shuffle

870. Advantage Shuffle

思路
用priority_queue<pair<int, int>>解决。使用贪心算法,按数组A从大到小尽可能在数组B中找到匹配的元素即可。就像是“田忌赛马”一样,让A的上等马去应付B的中等马,依次类推,就能有尽可能多的匹配对数。
技巧度:C, 思维绕脑度:C
贪心算法

代码

typedef pair<int, int> mp;

bool operator <(mp &p1, mp &p2){
    return p1.first >= p2.first;
}
class Solution {
public:
    vector<int> advantageCount(vector<int>& A, vector<int>& B) {
        priority_queue<mp> q;
        vector<int> res(A.size(), 0);
        stack<mp> st;
        map<int, int> ma;
        map<int, int> mb;
        
        sort(A.begin(), A.end(), greater<int>());
        
        for (int i = 0; i < B.size(); i++)
            q.push({B[i], i});
        
        for (int i = 0; i < A.size(); i++) {
            while(!q.empty() && A[i] <= q.top().first) {
                st.push(q.top());
                q.pop();
            }
            
            if (!q.empty()) {
                auto p = q.top();
                res[p.second] = A[i];
                q.pop();
            }
            else {
                auto p = st.top();
                res[p.second] = A[i];
                st.pop();
            }
        }
        
        
        return res;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容