zoukankan      html  css  js  c++  java
  • LeetCode(313):Super Ugly Number

    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. For example, [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.

    Note:
    (1) 1 is a super ugly number for any given primes.
    (2) The given numbers in primes are in ascending order.
    (3) 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.

    题意:给定因子Primes,求第n个Super ugly number。

    思路:和Ugly Number II 思路一样,不过这次要使用一个优先队列实现。

    代码:

    public class Solution {
        public int nthSuperUglyNumber(int n, int[] primes) {
            int[] ugly_number = new int[n];
            ugly_number[0] = 1;
            PriorityQueue<Node> q = new PriorityQueue<Node>();
            for(int i=0;i<primes.length;i++)
                q.add(new Node(0,primes[i],primes[i]));
            for(int i=1;i<n;i++){
                Node cur = q.peek();
                ugly_number[i] = cur.val;
                do{
                    cur = q.poll();
                    cur.val = ugly_number[++cur.index]*cur.prime;
                    q.add(cur);
                    
                }while(!q.isEmpty()&&q.peek().val==ugly_number[i]);
            }
            return ugly_number[n - 1];  
        }
        class Node implements Comparable<Node>{
            int index;
            int val;
            int prime;
            Node(int index,int val,int prime){
                this.val = val;
                this.index = index;
                this.prime = prime;
            }
            public int compareTo(Node x){
                return this.val>x.val ? 1:-1;
            }
        }
    }
  • 相关阅读:
    99. 恢复二叉搜索树
    337. 打家劫舍 III(dp+dfs)
    45. 跳跃游戏 II
    贪心
    460. LFU 缓存
    213. 打家劫舍 II(dp)
    MyScript 开发文档
    Android 全面屏体验
    Android Studio 导入自己编译的 framework jar
    cmake常用配置项
  • 原文地址:https://www.cnblogs.com/Lewisr/p/5248265.html
Copyright © 2011-2022 走看看