Super Ugly Number

2023-05-16

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.

这题算是Ugly Number II的一个拓展,主要是这里生成丑数的因数不再是[2,3,5]而是一个素数数组.其实做法还可以跟以前一样,只不过用一个和素数数组等长的数组来保存每个素数对应的index.产生一个素数时,更新这个数组.更新的判读方式也和之前一样,这样的复杂为O(nk).主要的消耗在于每次需要从k个素数生成的备选中,选择一个最小值,和更新index这个是O(k)的复杂度.那么有没有办法改进呢,有,可以看到每次前面的做法每次产生一个丑数,都要用每个素数产生一个备选,这些备选本身极其不可能一次全部更新,所以每次的候选中有相当大的重复部分.我们可以把备选放入heap当中.这样不用每次全部比较得到最小值(heap里面本身已经保存了相对关系).这样做的时间复杂度为O(nlogk),具体怎么证明还有待思考.附上一个很好的discuss


    def nthSuperUglyNumber(self, n, primes):
        """
        :type n: int
        :type primes: List[int]
        :rtype: int
        """
        length = len(primes)
        uglys = [1]
        times = [0] * length #prime[i]'s multipy places in uglys
        minHeap = [(primes[i],i) for i in xrange(length)]
        heapq.heapify(minHeap)
        
        while len(uglys) < n:
            (val, index) = minHeap[0]
            uglys.append(val)
            while minHeap[0][0] == uglys[-1]:
                index = heapq.heappop(minHeap)[1]
                times[index] += 1
                heapq.heappush(minHeap,(primes[index]*uglys[times[index]],index))
        return uglys[-1]
          

 

转载于:https://www.cnblogs.com/sherylwang/p/5594600.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Super Ugly Number 的相关文章

随机推荐

  • 201803考试批次2C 程序设计语言,重庆大学201803批次2可视化程序设计(VB)D卷答案...

    201803考试批次2可视化程序设计 VB D卷 5 O0 R K G l可视化程序设计 VB l K 3 Z t 一 单项选择题 共 10 题 0 20 分 c c N G1 F4 D6 39 64 1 下列程序段的执行结果为 Dim x
  • VNC注册码

    5D7L8 ZQXSA 2L5D4 4UFB4 PWDLA 转载于 https blog 51cto com ciscolinux 1320541
  • matlab中矩阵可视化,matlab-如何可视化显示颜色和值的矩阵?

    您可以使用内置功能 39 X Y Z TickLabelRotation 39 和 39 X Y Z TickLabelRotation 39 并调整图形对象的许多参数 xff0c 轻松地自己创建此类绘图 这是一个例子 xff1a mat
  • Formik与antd-mobile的表单实践(上)

    概览 本文主要用于记录该次使用Formik时用到的相关接口 xff0c 而侧重点不在antd mobile xff0c 对antd mobile会贴出对应组件API 文章需要基础知识点 xff1a React基本知识ES6基本知识 文章实践
  • AT&T CORD架构解读

    这一两年 xff0c 我们时常听到CORD项目 xff08 Central Office Re Architected as a Data Center xff09 AT amp T希望通过CORD项目将运营商网络中的传统端局 xff08
  • 发送端口25,465,587端口疑问解答

    25端口 xff08 SMTP xff09 xff1a 25端口为SMTP xff08 Simple Mail Transfer Protocol xff0c 简单邮件传输协议 xff09 服务所开放的 xff0c 是用于发送邮件 如今绝大
  • brctl 命令详解

    安装网桥管理工具包 xff1a bridge utile 96 96 96 yum install bridge utils y 96 96 96 96 96 96 使用brctl命令创建网桥br1 96 96 96 brctl addbr
  • 缓存缓存CSS的策略

    浏览器缓存CSS将带来主要的性能提升 您确保服务器设置为发送标头 xff0c 这些标头告诉浏览器在给定的时间内挂接到CSS文件 最好的做法是 xff0c 即使不是大多数站点 xff0c 许多站点已经在这样做 与浏览器缓存紧密结合的是缓存清除
  • John the Ripper 安装用使用

    试着在ubuntu下安装了John the Ripper最新版本 xff11 7 9 xff0c 非常不给面子 xff0c 不成功 xff0c 总是报 34 No password hashes loaded 34 的错误 最终参照这篇文章
  • Vue父组件接收不到子组件$emit事件的原因分析

    通常有两种情况 xff1a 事件名称不全是小写 事件名称要求全小写 不是父子关系 这里的父子关系是严格的父子关系 xff0c 祖孙关系也不行 只能一层一层触发 xff0c 这在写树形组件时 xff0c 很容易掉坑里
  • NUMA的关闭方法【转】

    Centos 6 在 etc grub conf 在kernel 添加numa 61 off 就行了 一 检查OS是否开启NUMA numactl hardware available 1 nodes 0 如果是2或多个nodes就说明nu
  • java 网站用户在线和客服聊天

    注 xff1a 本文来源于 java 网站用户在线和客服聊天 这是应用到项目中的一个例子 实现原理是将信息存储到Application域里面 然后使用Struts2 Action 用json格式的数据进行前后台交互 截图 xff1a 前台用
  • Linux中文乱码问题终极解决方法

    方法一 xff1a 修改 root bash profile文件 xff0c 增加export LANG 61 zh CN GB18030 该文件在用户目录下 xff0c 对于其他用户 xff0c 也必须相应修改该文件 使用该方法时putt
  • C#将Excel数据表导入SQL数据库的两种方法(转)

    最近用写个winform程序想用excel 文件导入数据库中 xff0c 网上寻求办法 xff0c 找到了这个经过尝试可以使用 方法一 实现在c 中可高效的将excel数据导入到sqlserver数据库中 很多人通过循环来拼接sql xff
  • 最难学的10大编程语言排行榜,Java只排第三,第一出乎意料

    2018年12月的TIOBE编程语言排行榜已经出炉 xff0c Python重回前三 xff0c Go语言跌出前十 xff0c Visual Basic NET涨幅明显 xff0c 保持第五名 TIOBE排行榜是根据互联网上有经验的程序员
  • 网络安全设计方案

    IDC网络系统安全实施方案 1 吉通上海 IDC网络安全功能需求 1 1 吉通上海公司对于网络安全和系统可靠性的总体设想 xff08 1 xff09 网络要求有充分的安全措施 xff0c 以保障网络服务的可用性和网络信息的完整性 要把网络安
  • Altium_Designer-怎么将“原理图的更改”更新到“pcb图”?

    打开原理图 xff0c 直击菜单栏 gt gt Design xff0c 选择第一项 xff0c gt gt Update PCB Document 在弹出的对话框里面选择执行更改即可将原理图更新到工程下面对应的PCB 也可以先点生效更改看
  • Permutations II

    Given a collection of numbers that might contain duplicates return all possible unique permutations For example 1 1 2 ha
  • 【沧海拾昧】C# .Net 基本控件介绍

    C0201 沧海茫茫千钟粟 xff0c 且拾吾昧一微尘 沧海拾昧集 64 CuPhoenix 阅前敬告 沧海拾昧集仅做个人学习笔记之用 xff0c 所述内容不专业不严谨不成体系 如有问题必是本集记录有谬 xff0c 切勿深究 写在前面 本文
  • 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