剑指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…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...

ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...