力扣-313题 超级丑数(C++)- priority

力扣-313题 超级丑数(C++)- priority,第1张

题目链接:https://leetcode-cn.com/problems/super-ugly-number/
题目如下:

class Solution {
public:
    int nthSuperUglyNumber(int n, vector<int>& primes) {
        typedef pair<long,long> PII;//or  using PII=pair;
        priority_queue<PII,vector<PII>,greater<PII>> minheap;//小顶堆的目的是:让每个权值的指数次方都进行排序

        for(auto e:primes) minheap.push({e,0});//e为对应指针的权值,0为这个指针对应的下标

        vector<int> q(n);
        q[0]=1;
        for(int i=1;i<n;){
            auto temp=minheap.top();//获取堆顶元素
            minheap.pop();
            if(temp.first!=q[i-1]) q[i++]=temp.first;//数组里的下一个位置,且确保前一个元素和堆顶元素不相同
            long pos=temp.second,p=temp.first/q[pos];//求其下标及质数
            minheap.push({p*q[pos+1],pos+1});//质数的指针往后移动一位
        }

        return q[n-1];
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/673998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存