题目链接: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];
}
};
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)