剑指offer面试题34 丑数
考察点
空间换时间提效
知识点
题目
分析
这里面其实用到了一点点的数学知识,丑数的定义是只包含2,3,5因子的数。现在要求第1500个丑数,最简单的办法就是从数字1开始遍历,依次判断每个数字是不是丑数,如果是的话累计丑数数量直到1500,而判断是否是丑树的办法就是依次求余2,3,5,并且除2,3,5,最后数字是1的话则说明它是丑数,这种方法时间复杂度非常非常的高,针对非丑数它也会计算一次。我们需要想一个高效的算法,这里同样用到一点数学知识,按照题目的定义丑数一定是丑数的2,3,或者5倍,所以可以看出最新的丑数和历史的丑数是有关系的,所以我们其实可以把历史的丑数都存起来,每次在求新的丑数的时候都求一遍历史丑数的2,3,5倍并且取这里面的最小值就是最新的丑数(前提是不能重复)。这里面又有一个问题,每次都求一遍历史的所有数据的2,3,5倍也很耗时,其实只要我们存起来的丑数是按照顺序存放的,那么可以把每次不超过最新丑数的最大元素的下标存起来,每次只要取这3个元素的最小值就可以了(因为由于顺序存放所以比最大元素小的那些元素的2,3,5倍的数据一定已经存在了)
public class ThirtyFour {public static void main(String[] args) {
// System.out.println(uglyOne(1500));System.out.println(ugly(1500));}public static long ugly(int length) {int index = 1;long[] arr = new long[length];arr[0] = 1;int twoIndex = 0;int threeIndex = 0;int fiveIndex = 0;while(index < length) {long val = min(arr[twoIndex] * 2,arr[threeIndex] * 3,arr[fiveIndex] * 5);arr[index] = val;while(arr[twoIndex] * 2 <= arr[index]) {twoIndex++;}while(arr[threeIndex] * 3 <= arr[index]) {threeIndex++;}while(arr[fiveIndex] * 5 <= arr[index]) {fiveIndex++;}index = index + 1;}return arr[length - 1];}public static long min(long a,long b,long c) {if (a < b) {if (a < c) {return a;} else {return c;}} else {if (b < c) {return b;} else {return c;}}}public static long uglyOne(int length) {int data = 1;int count = 0;while(count < length) {int i = data;while(i % 2 == 0) {i /= 2;}while(i % 3 == 0) {i /= 3;}while(i % 5 == 0) {i /= 5;}if (i == 1) {count++;}data++;}return data - 1;}
}
相关文章:
剑指offer面试题34 丑数
考察点 空间换时间提效知识点 题目 分析 这里面其实用到了一点点的数学知识,丑数的定义是只包含2,3,5因子的数。现在要求第1500个丑数,最简单的办法就是从数字1开始遍历,依次判断每个数字是不是丑数,如果…...
C++ std::list的merge()使用与分析
看到《C标准库第2版》对list::merge()的相关介绍,令我有点迷糊,特意敲代码验了一下不同情况的调用结果。 《C标准库第2版》对list::merge()的相关介绍 list::merge()定义 merge()的作用就是将两个list合并在一起,函数有2个版本:…...
Quartz的分布式功能化设计
Quartz的分布式功能化设计 文章目录 Quartz的分布式功能化设计主体功能实现依赖API例子JOBJob记录表设计java具体代码DateDOOperatorDOSysQuartzJobDOPageDTOQuartzJobDTOQuartzJobPageDTOQuartzJobStatusEnumQuartzJobControllerIQuartzJobServiceQuartzJobServiceImplQuartzJ…...
Caffeine缓存
本地缓存基于本地环境的内存,访问速度非常快,对于一些变更频率低、实时性要求低的数据,可以放在本地缓存中,提升访问速度 使用本地缓存能够减少和Redis类的远程缓存间的数据交互,减少网络 I/O 开销,降低这…...
AI辅助研发正在成为造福人类的新生科技力量
目录 1.AI用于药物研发 (1)药物靶点预测: (2)药物分子设计: (3)药物筛选: (4)药效和安全性预测: (5)…...
程序分享--排序算法--归并排序
关注我,持续分享逻辑思维&管理思维; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导; 有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自…...
pg数据库和mysql区别
区别一 PostgreSQL (通常称为 PG) 和 MySQL 都是广泛使用的关系型数据库管理系统 (RDBMS)。虽然它们都是用于存储和管理数据的关系数据库,但它们在一些方面有很大的区别,如下所述: 数据类型:PostgreSQL 支持更多的数据类型&#…...
Jetpack Compose 动画正式开始学习
1. 简单值动画 //将一个Color简单值 从一个值 变化到另一个 另一个简单值 就用 animateColorAsStateval backgroundColor by animateColorAsState(if (tabPage TabPage.Home) Purple100 else Green300) 动画其实就是 一个状态不停发生改变导致 组件不断重组产生的过程 2.…...
iOS 17.4报错: libopencore-amrnb.a[arm64]
iOS 17.4报错: libopencore-amrnb.a[arm64] iOS 17.4 模拟器运行报错解决方案 iOS 17.4 模拟器运行报错 Building for ‘iOS-simulator’, but linking in object file (/XXX/lib/libopencore-amrnb.a[arm64]2) built for ‘iOS’ 解决方案 在Podfile里添加如下设…...
鼓楼夜市管理wpf+sqlserver
鼓楼夜市管理系统wpfsqlserver 下载地址:鼓楼夜市管理系统wpfsqlserver 说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于C#wpf架构和sql server数据库 功能模块: 登录注册 鼓楼夜市管理系统主界面所有店铺信…...
【五、接口自动化测试】5分钟掌握python + requests接口测试
你好啊!我是山茶,一个持续探索AI 测试的程序员! 在做接口测试时,在python中内置了HTTP库 urllib,可以用于发送http请求。基于urllib二次封装的三方库Requests,相较于urllib更佳简介易用。所以,…...
双边市场的基本理论
双边市场由两个不同类型的用户组成,通过一个中介机构或平台进行交易,其中一边用户的决策会影响另一边用户的结果。这种影响被称为间接网络外部性,它导致了平台在吸引和平衡两边用户时面临的挑战。 平台定价在双边市场中成为核心问题…...
R统计学2 - 数据分析入门问题21-40
往期R统计学文章: R统计学1 - 基础操作入门问题1-20 21. 如何对矩阵按行 (列) 作计算? 使用函数 apply() vec 1:20 # 转换为矩阵 mat matrix (vec , ncol4) # [,1] [,2] [,3] [,4] # [1,] 1 6 11 16 # [2,] 2 7 12 17 # [3,] …...
蓝桥杯2023年-买瓜(dfs,类型转换同样耗时)
题目描述 小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜,每个瓜的重量为 Ai 。 小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。 小蓝希望买到的瓜的重量的和恰好为 m 。 请问小蓝至少要劈多少个瓜才能买到重量恰好…...
生成式人工智能服务安全基本要求实务解析
本文尝试明晰《基本要求》的出台背景与实践定位,梳理《基本要求》所涉的各类安全要求,以便为相关企业遵循执行《基本要求》提供抓手。 引言 自2022年初以来,我国陆续发布算法推荐、深度合成与生成式人工智能服务相关的规范文件,…...
nginx详解,配置http,https,负载均衡,反向代理,SMTP 代理步骤说明
Nginx 是一款高性能的开源 Web 服务器,同时也可以用作反向代理服务器、负载均衡器、HTTP 缓存、HTTPS 中继、以及作为邮件代理服务器等。以下是 Nginx 可以实现的一些常见用途: 静态内容服务: Nginx 可以用来提供静态内容,比如 HTML、CSS、JavaScript 文件等。 动态内容服务…...
ARTS Week 20
Algorithm 本周的算法题为 1222. 可以攻击国王的皇后 在一个 下标从 0 开始 的 8 x 8 棋盘上,可能有多个黑皇后和一个白国王。 给你一个二维整数数组 queens,其中 queens[i] [xQueeni, yQueeni] 表示第 i 个黑皇后在棋盘上的位置。还给你一个长度为 2 的…...
python如何读取文件
这里的文件是txt文件,office文件不支持。 假如有一个pi_digits的txt文件,里面的内容是“3.1415926” 如果要读取这个文件的内容,需要调取pathlib模块,并把路径告知python。同时python文件必须要和目标读取文件在一个文件夹里。 …...
InnoDB和MyISAM存储引擎
InnoDB mysql默认存储引擎 支持事务,行级锁(并发量大),外键约束,容量大,支持缓存,支撑主键自增, 全文检索,不存储表的总行数,需要sql逐行统计 MyISAM 不…...
DataGrip 2023:让数据库开发变得更简单、更高效 mac/win
JetBrains DataGrip 2023是一款功能强大的数据库IDE,专为数据库开发和管理而设计。通过DataGrip,您可以连接到各种关系型数据库管理系统(RDBMS),并使用其提供的一组工具来查询、管理、编辑和开发数据库。 DataGrip 2023软件获取 DataGrip 2…...
保姆级教程:手把手教你用Dify 0.6.0源码搭建自己的AI工作流引擎(附避坑指南)
从零构建AI工作流引擎:Dify 0.6.0源码实战指南 当你第一次打开Dify的源码仓库,可能会被那些复杂的目录结构和抽象类搞得一头雾水。别担心,三周前我也和你一样,直到我亲手将这套系统跑起来并修改了第一个工作流节点。本文将带你用最…...
从‘听不清’到‘听得准’:深入FunASR的VAD模型,教你调参优化语音识别在嘈杂环境下的表现
从‘听不清’到‘听得准’:深入FunASR的VAD模型,教你调参优化语音识别在嘈杂环境下的表现 在工业巡检的轰鸣声中,工程师的语音指令频繁被机器噪音淹没;车载语音助手总在高速风噪下错误触发;户外采访录音里的对话被风声…...
如何让你的第三方鼠标在macOS上重获新生?Mac Mouse Fix让普通鼠标体验提升300%
如何让你的第三方鼠标在macOS上重获新生?Mac Mouse Fix让普通鼠标体验提升300% 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 你是…...
G-Helper技术指南:华硕笔记本显示配置与性能优化全解析
G-Helper技术指南:华硕笔记本显示配置与性能优化全解析 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, S…...
LN2407 PWM/PFM 控制 DC-DC 降压稳压器
■ 产品概述 LN2407 是一款由基准电压源、振荡电路、比较器、PWM/PFM 控制电路等构成的 CMOS 降压 DC/DC 调整器。利用 PWM/PFM 自动切换控制电路达到可调占空比,具有全输入电压范围(2.0-6V)内的低纹波、高效率和大输出电流等特点…...
动态模型避坑指南:从事件脚本到状态图的5个常见错误及解决方法
动态模型避坑指南:从事件脚本到状态图的5个常见错误及解决方法 在交互式系统开发中,动态模型是连接用户需求与技术实现的关键桥梁。许多中高级开发者虽然掌握了UML工具的基本操作,却在真实项目交付时频繁遭遇状态机失控、事件响应异常等"…...
如何实现重组抗体的精准定制?
一、重组抗体定制与传统抗体制备有何本质区别?重组抗体定制是通过基因工程技术在体外构建并表达目标抗体的创新方法。与传统杂交瘤技术相比,重组抗体技术具有多方面的显著优势。首先,其生产完全不依赖于动物免疫系统,而是通过人工…...
实战指南:基于快马平台生成trea国际版本地化价格展示组件代码
最近在开发一个国际电商项目时,遇到了一个很实际的需求:需要根据不同地区用户展示本地化格式的商品价格。这个看似简单的功能,其实涉及到货币转换、数字格式化、符号位置等多个细节。经过一番摸索,我总结出了一套比较完整的实现方…...
别再只会用assign了!手把手教你用Verilog for循环实现4位乘法器(附Modelsim仿真对比)
从assign到for循环:Verilog乘法器的硬件思维进阶指南 在FPGA开发中,乘法器是最基础却又最容易被忽视的运算单元。许多初学者会直接使用assign out a*b;这样的简洁写法,却很少思考这行代码背后究竟生成了怎样的硬件电路。本文将带你从硬件思维…...
告别玄学预测:用Google TimesFM给你的业务数据(销售/流量/库存)做个靠谱的“体检报告”
告别玄学预测:用Google TimesFM给你的业务数据做个靠谱的“体检报告” 每次季度复盘会上,市场部的小王总会被老板问到同一个问题:"下个季度的销量到底会涨还是跌?"而他的回答往往只能基于上个月的增长率拍脑袋——直到市…...
