leetcode超级丑数

1.n个指针

设primes.size()=n,则设置n个指针,初始为0,分别指向结果数组中有资格与primes[0]--primes[n-1]相乘的元素的下标,取最小值,且最小值对应的指针的值加1,

代码如下:

class Solution {
public:
    int nthSuperUglyNumber(int n, vector<int>& primes) {    
   //即该元素的质因数为primes中的一个
   //和丑数一样,不同之处在于设置了primes.size()个指针
    vector<int> res(n);
    res[0]=1;
    int len=primes.size();
    vector<int> p(len,0);//设置len个指针
    for(int i=1;i<n;i++)
    {
        int imin=INT_MAX;
        for(int j=0;j<len;j++)
           if(primes[j]*res[p[j]]<imin)
             imin=primes[j]*res[p[j]];
        
        res[i]=imin;

        for(int j=0;j<len;j++)
          if(primes[j]*res[p[j]]==imin)
            p[j]++;
    }
    return res[n-1];
    }
};

2.堆

发布了191 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38196982/article/details/104817884