LeetCode 1201. 丑数 III(最小公倍数+二分查找)

1. 题目

请你帮忙设计一个程序,用来找出第 n 个丑数。

丑数是可以被 a b c 整除的 正整数。

示例 1:
输入:n = 3, a = 2, b = 3, c = 5
输出:4
解释:丑数序列为 2, 3, 4, 5, 6, 8, 9, 10... 其中第 3 个是 4。示例 2:
输入:n = 4, a = 2, b = 3, c = 4
输出:6
解释:丑数序列为 2, 3, 4, 6, 8, 9, 12... 其中第 4 个是 6。示例 3:
输入:n = 5, a = 2, b = 11, c = 13
输出:10
解释:丑数序列为 2, 4, 6, 8, 10, 11, 12, 13... 其中第 5 个是 10。示例 4:
输入:n = 1000000000, a = 2, b = 217983653, c = 336916467
输出:1999999984提示:
1 <= n, a, b, c <= 10^9
1 <= a * b * c <= 10^18
本题结果在 [1, 2 * 10^9] 的范围内

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/ugly-number-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 类似题目:
    LeetCode 263. 丑数 && 264. 丑数 II(DP)
    LeetCode 313. 超级丑数(动态规划)
    程序员面试金典 - 面试题 17.09. 第 k 个数(set优先队列/DP)
class Solution {
public:long nthUglyNumber(long n, long a, long b, long c) {long long mid;long long lcm_ab = lcm(a,b);//ab的最大公约数 long long lcm_ac = lcm(a,c);// aclong long lcm_bc = lcm(b,c);// bclong long lcm_abc = lcm(a,lcm_bc);//abc的最大公约数 //一个周期内,abc的最大公约数假设为n,有多少个丑数?//是 a 的倍数的 n/a 个 减去重复的 case 4,6,7         case 1//是 b 的倍数的 n/b 个 减去重复的 case 4,5,7         case 2//是 c 的倍数的 n/c 个  减去重复的 case 5,6,7        case 3//是 ab 的倍数的 n/lcm_ab 个 减去重复的 case 7       case 4//是 bc 的倍数的 n/lcm_bc 个 减去重复的 case 7       case 5//是 ac 的倍数的 n/lcm_ac 个 减去重复的 case 7       case 6//是 abc 的倍数的 n/lcm_abc = 1 个                  case 7//case1-7汇总:如下long long count = lcm_abc/a + lcm_abc/b + lcm_abc/c - lcm_abc/lcm_ab - lcm_abc/lcm_ac - lcm_abc/lcm_bc + 1;long long factor = n/count;//到lcm_abc处有count个丑数,n个丑数还需要几倍long long rest = n%count;//剩余的个数long long ans = factor*lcm_abc;//在factor*lcm_abc处已经得到,还差rest个丑数if(rest > 0){long long l = 1, r = lcm_abc, mid;while(l <= r){mid = l+((r-l)>>1);count = mid/a + mid/b + mid/c - mid/lcm_ab - mid/lcm_ac - mid/lcm_bc + mid/lcm_abc;if(count >= rest)r = mid-1;else// if(count < rest)l = mid+1;}ans += l;}return ans;}long lcm(long a, long b)//最小公倍数{return a*b/gcd(a,b);}long gcd(long a, long b)//最大公约数{long r;while(b){r = a%b;a = b;b = r;}return a;}
};

二分处还可以写做:

while(l < r)
{mid = l+((r-l)>>1);count = mid/a + mid/b + mid/c - mid/lcm_ab - mid/lcm_ac - mid/lcm_bc + mid/lcm_abc;if(count >= rest)//mid处可能是答案,因为最后如[1,2]取不到2,不能mid-1r = mid;else// if(count < rest)l = mid+1;
}

0 ms 6 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2008年最受欢迎的资源top100

fromhttp://topic.csdn.net/u/20090116/14/bbe94537-4d1a-44e3-b4bb-01e8c4bd5998.htmlgoogle北电华为腾讯网易迅雷中兴试题及面试经验 sql语句妙用&#xff0c;各种sql语句的详细用法与讲解 仿QQ2008聊天程序(c#源码) 要想精通java必须看的经典书籍&#xff08;强顶&#x…

java抢单功能_基于消息队列的高并发抢单功能实现方法与流程

本发明涉及嵌入式软件中间件&#xff0c;具体涉及一种基于消息队列的高并发抢单功能实现方法。背景技术&#xff1a;中间件是一种独立的系统软件或服务程序&#xff0c;分布式应用系统借助这种软件在不同的技术之间共享资源&#xff0c;管理计算资源和网络通讯。它在计算机系统…

LeetCode LCP 12. 小张刷题计划(二分查找)

1. 题目 为了提高自己的代码能力&#xff0c;小张制定了 LeetCode 刷题计划&#xff0c;他选中了 LeetCode 题库中的 n 道题&#xff0c;编号从 0 到 n-1&#xff0c;并计划在 m 天内按照题目编号顺序刷完所有的题目&#xff08;注意&#xff0c;小张不能用多天完成同一题&…

java 监控 配置 文件怎么打开_java实现文件变化监控的方法(推荐)

一. spring配置文件&#xff1a;application.xmlxmlns:tx"http://www.springframework.org/schema/tx" xmlns:aop"http://www.springframework.org/schema/aop"xmlns:context"http://www.springframework.org/schema/context" xmlns:dwr"ht…

场景编辑器竣工!

今天接着做XML解析&#xff0c;对那个遍历的结构作了些修改&#xff0c;插入了几个函数。 终于&#xff0c;新的场景编辑器竣工了&#xff01; 一个比较复杂的场景了&#xff0c;用3dsMax制作材质&#xff0c;安排物件位置和所用材质 导出到DirectX中&#xff0c;效果感觉比Max…

将MathType公式转换为Blog可用的LaTeX公式(MD编辑器)

会LaTex语法的同学敲起来还是会快一些的。 符号参考&#xff1a; LaTeX 各种命令&#xff0c;符号Latex所有常用数学符号整理 不会的同学&#xff0c;可以按照以下方式操作&#xff1a; 在MathType内先敲好公式 可以手敲&#xff0c;也可以手写&#xff08;手写调用windows的…

java trim 不好使_Java String trim无效

7 个答案:答案 0 :(得分&#xff1a;49)该网站的源代码显示了特殊的html字符 。尝试在java字符串中搜索或替换以下内容&#xff1a;\u00A0。rank rank.replaceAll("\u00A0", "");应该有效。也许添加一个双\\而不是\。答案 1 :(得分&#xff1a;6)您应该将…

JQuery + Json 练习随笔

早就听说JQuery Ajax的方便快捷以及Json优秀的数据交换&#xff0c;今天有空尝试了一下&#xff0c;菜鸟了一番。对初步的使用也算是有个比较抽象的理解吧。记录之备忘&#xff01; json简介&#xff1a; JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人…

java jxl 写 excel文件_java采用jxl写入一个Excel文件

jxl写入一个excel文件。读取方面请看下面相关链接&#xff0c;上一遍是关于读取excel的。package com.javaer.file;import java.io.File;import java.io.IOException;import jxl.Workbook;import jxl.write.Label;import jxl.write.WritableCellFormat;import jxl.write.Writab…

LeetCode 313. 超级丑数(动态规划)

1. 题目 编写一段程序来查找第 n 个超级丑数。 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。 示例: 输入: n 12, primes [2,7,13,19] 输出: 32 解释: 给定长度为 4 的质数列表 primes [2,7,13,19]&#xff0c; 前 12 个超级丑数序列为&#xf…

Visual Studio 2010 旗舰版免序列号安装体验

Visual Studio 2010 E文版已经发布多时&#xff0c;由于工作原因没有及早的下载体验&#xff0c;直到前几天园子里的朋友放出了下载简体中文的种子 ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467C831C2|/于是决定下来…

java 类的高级特性_java程序-类的高级特性

创建Employee类&#xff0c;在类中定义三个属性&#xff1a;编号&#xff0c;姓名&#xff0c;年龄&#xff0c;然后在构造方法里初始化这三个属性&#xff0c;最后在实现接口中的定义的CompareTo方法&#xff0c;将对象按编号升序排列。代码如下&#xff1a;(程序可能有些错误…

潜在狄利克雷分配(Latent Dirichlet Allocation,LDA)

文章目录1. 狄利克雷分布2. 潜在狄利克雷分配模型3. 学习推理4. sklearn.decomposition.LatentDirichletAllocation潜在狄利克雷分配&#xff08;latent Dirichlet allocation&#xff0c;LDA&#xff09;&#xff0c;作为基于 贝叶斯学习的话题模型&#xff0c;是潜在语义分析…

JMF入门(Java Media Framework)

JMF是SUN推出的用来提供给Java开发者使用Java开发视频与音频播放程序的开发库&#xff0c;JMF的推出已经有几年的历史了&#xff0c;目前最新的版本为 2.1.1e&#xff0c;这里我们来讲述使用Java的AWT组件来开发一个视频播放器&#xff0c;采用JMF作为视频的播放库&#xff0c;…

LeetCode 983. 最低票价(动态规划)

1. 题目 在一个火车旅行很受欢迎的国度&#xff0c;你提前一年计划了一些火车旅行。 在接下来的一年里&#xff0c;你要旅行的日子将以一个名为 days 的数组给出。 每一项是一个从 1 到 365 的整数。 火车票有三种不同的销售方式&#xff1a; 一张为期一天的通行证售价为 co…

final 数组 java_Java Final数组列表

您是正确的声明列表最终意味着您无法将列表变量重新分配给另一个对象.另一个问题(我想)是public class SomeClass {private static final ArrayList list new ArrayList();}VSpublic class SomeClass {ArrayList list new ArrayList();}我们轮流使用每个修饰符.private只有这…

生活点滴语录

1、gmail与chrome&#xff0c;高效实用&#xff0c;简单大方。生活中用到的两款google产品&#xff0c;确实喜欢。2、g.cn&#xff0c;值得信任。-------简洁明了&#xff0c;深入人心。3、深度&#xff0c;值得深入。-------精髓的解说。4、有人说态度决定一切&#xff0c;有人…

LeetCode 1306. 跳跃游戏 III(广度优先搜索BFS)

1. 题目 这里有一个非负整数数组 arr&#xff0c;你最开始位于该数组的起始下标 start 处。 当你位于下标 i 处时&#xff0c;你可以跳到 i arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。 注意&#xff0c;不管是什么情况下&#xff…

mysql错误日志为aborting_MySQL 错误日志(Error Log)

同大多数关系型数据库一样&#xff0c;日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件。通常包括错误日志文件&#xff0c;二进制日志&#xff0c;通用日志&#xff0c;慢查询日志&#xff0c;等等。这些日志能够帮助我们定位mysqld内部发生的事件&#xff0…

this和arguments

this是面向对象语言中的一个重要概念&#xff0c;在JAVA,C#等大型语言中&#xff0c;this固定指向运行时的当前对象。但是在javascript中&#xff0c;由于javascript的动态性&#xff08;解释执行&#xff0c;当然也有简单的预编译过程&#xff09;&#xff0c;this的指向在运行…