zoukankan      html  css  js  c++  java
  • LeetCode-313 Super Ugly Number

    题目描述

    Write a program to find the nth super ugly number.

    Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k.

    题目大意

    给一组素数,要求找到以这组素数中任意数字为因子的第n小的数字(认定第一个数字一定为1)。

    示例

    E1

    Input: n = 12, primes = [2,7,13,19]
    Output: 32 
    Explanation: [1,2,4,7,8,13,14,16,19,26,28,32] is the sequence of the first 12 
                 super ugly numbers given primes = [2,7,13,19] of size 4.

    解题思路

    一个数组res保存前n小的数字,另一个数组pos保存primes中的素数的倍数,依次递乘计算第i小的数字,最后一个数字即为所求的第n小的数字。

    复杂度分析

    时间复杂度:O(N * K)

    空间复杂度:O(N)

    代码

    class Solution {
    public:
        int nthSuperUglyNumber(int n, vector<int>& primes) {
            int k = primes.size();
            // 保存前n小的数字
            vector<int> res(n);
            // 保存第i个primes的乘积
            vector<int> pos(k, 0);
            res[0] = 1;
            
            for(int i = 1; i < n; ++i) {
                int tmp = INT_MAX;
                // 取第i小的数字
                for(int j = 0; j < k; ++j)
                    tmp = min(tmp, res[pos[j]] * primes[j]);
                // 若该数字是primes中某素数的乘积,则pos[j]加一
                for(int j = 0; j < k; ++j) {
                    if(tmp == res[pos[j]] * primes[j])
                        pos[j]++;
                }
                res[i] = tmp;
            }
            
            return res[n - 1];
        }
    };
  • 相关阅读:
    360安全浏览器发布
    搬家了
    驾驶员考试科目一通过
    脑海中总有些新念头
    2008汤姆斯杯尤伯杯羽毛球赛事直播时刻表
    操作日期和时间
    数据库设计中的14个技巧
    字段属性(空值、缺省值、标记字段/自增字段)
    SQL触发器
    数据库质疑事件 总结
  • 原文地址:https://www.cnblogs.com/heyn1/p/11170221.html
Copyright © 2011-2022 走看看