lintcode-4.丑数

简介: lintcode-4.丑数

描述

如果一个数只有质数因子235 ,那么这个数是一个丑数。

前10个丑数分别为 1, 2, 3, 4, 5, 6, 8, 9, 10, 12...设计一个算法,找出第N个丑数。

我们可以认为 1 也是一个丑数。

1≤n≤105

样例 1:

输入:

n = 9

输出:

10

解释:

[1,2,3,4,5,6,8,9,10,…],第9个丑数为10。

样例 2:

输入:

n = 1

输出:

1

挑战

要求时间复杂度为 O(nlogn) 或者 O(n)。

题解

思路

结论:当前丑数必定是之前某个丑数 的 2倍、3倍、或者 5倍。

定义一个数组result存放丑数,默认第一个丑数是1。那么当前丑数一定是result数组中在他之前的丑数的2,3,5倍中最小的一个,当然这个值一定是大于result[length-1]的最小值

result[1]=min(2result[0-length-1],3result[0-length-1],5*[0-length-1])

分别用2,3,5乘1寻找第二个丑数,得到最小值2作为第二个丑数即num[1]=2。

第三个丑数:

大于2且在21 31 51 22 32 52中的最小是==》3

4.以此类推找到第n个最小值为第n个丑数。

代码

const nthUglyNumber = function (n) {
var result = [1];
var i, t, nextchoushu;
while (result.length < n) {
    // 当前已经计算出来的丑数的最后一个
    t = result[result.length - 1];
    // 最后一个丑数*2
    nextchoushu = t * 2;
    // 遍历已经计算出来的丑数
    for (i = 0; i < result.length; i++) {
        // 
        if (result[i] * 2 > t) {
            nextchoushu = Math.min(result[i] * 2, nextchoushu);
        }
    }
    for (i = 0; i < result.length; i++) {
        if (result[i] * 3 > t) {
            nextchoushu = Math.min(result[i] * 3, nextchoushu);
        }
    }
    for (i = 0; i < result.length; i++) {
        if (result[i] * 5 > t) {
            nextchoushu = Math.min(result[i] * 5, nextchoushu);
        }
    }
    result.push(nextchoushu);
}
return result[n - 1];
}

相关文章
|
6月前
|
Web App开发 前端开发 JavaScript
前端新利器:CSS容器查询——让组件真正“自适应
前端新利器:CSS容器查询——让组件真正“自适应
396 83
|
5月前
|
物联网 开发者
LoRA 模型的全新玩法——AutoLoRA 带你体验 LoRA 检索与融合的魔法
LoRA 模型的全新玩法——AutoLoRA 带你体验 LoRA 检索与融合的魔法
314 0
|
4月前
|
SQL 存储 关系型数据库
MySQL为什么被广泛使用
MySQL凭借其卓越的技术特性、成熟的开源生态和持续创新,成为数据库领域领军者。它以高性能、高可用性和广泛的社区支持,赢得从初创公司到世界500强企业的广泛采用。本文深入解析MySQL持续成功的背后原因。
|
6月前
|
人工智能 监控 安全
MCP与企业数据集成:ERP、CRM、数据仓库的统一接入
作为一名深耕企业级系统集成领域多年的技术博主"摘星",我深刻认识到现代企业面临的数据孤岛问题日益严重。随着企业数字化转型的深入推进,各类业务系统如ERP(Enterprise Resource Planning,企业资源规划)、CRM(Customer Relationship Management,客户关系管理)、数据仓库等系统的数据互联互通需求愈发迫切。传统的点对点集成方式不仅开发成本高昂,维护复杂度也呈指数级增长,更重要的是难以满足实时性和一致性要求。Anthropic推出的MCP(Model Context Protocol,模型上下文协议)为这一痛点提供了革命性的解决方案。MCP通过
409 0
|
机器学习/深度学习 人工智能 算法
UCLA、MIT数学家推翻39年经典数学猜想!AI证明卡在99.99%,人类最终证伪
近日,加州大学洛杉矶分校和麻省理工学院的数学家团队成功推翻了存在39年的“上下铺猜想”(Bunkbed Conjecture),该猜想由1985年提出,涉及图论中顶点路径问题。尽管AI在研究中发挥了重要作用,但最终未能完成证明。人类数学家通过深入分析与创新思维,找到了推翻猜想的关键证据,展示了人类智慧在数学证明中的不可替代性。成果发表于arXiv,引发了关于AI在数学领域作用的广泛讨论。
387 89
|
人工智能 编解码 测试技术
HART:麻省理工学院推出的自回归视觉生成模型
HART(Hybrid Autoregressive Transformer)是麻省理工学院推出的自回归视觉生成模型,能够直接生成1024×1024像素的高分辨率图像,质量媲美扩散模型。HART基于混合Tokenizer技术,显著提升了图像生成质量和计算效率,适用于数字艺术创作、游戏开发、电影和视频制作等多个领域。
461 1
|
Unix Linux 网络安全
使用RPC和Squid搭建代理实现在校外使用外网 访问校园网解决办法
使用RPC和Squid搭建代理实现在校外使用外网 访问校园网解决办法
797 0
使用RPC和Squid搭建代理实现在校外使用外网 访问校园网解决办法
|
消息中间件 负载均衡 监控
Spring Cloud Alibaba 介绍
Spring Cloud Alibaba 介绍
1786 0
Revit二次开发—更改激活视图(activeview)失败原因
Revit二次开发—更改激活视图(activeview)失败原因
Revit二次开发—更改激活视图(activeview)失败原因
|
物联网 API 开发者
3_2_AliOS Things 命令行介绍|学习笔记
快速学习3_2_AliOS Things 命令行介绍。
529 0
3_2_AliOS Things 命令行介绍|学习笔记