【leetcode】丑数III (二分枚举+容斥定理)

5198.丑数III Time: 20190922 Type: Medium 题目描述 请你帮忙设计一个程序,用来找出第 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, ... 阅读详情

请你帮忙设计一个程序,用来找出第 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] 的范围内

链接:https://leetcode-cn.com/problems/ugly-number-iii

思路分析:

看数据,n在10^9,O(n)的时间复杂度和空间复杂度根本做不来,因此动态规划什么的不用考虑了。一般这种情况下时间复杂度只能考虑O(1),O(lgn). 于是可以想到用二分枚举。
关键是,二分枚举的mid要和n进行比较,来决定分在哪个区间。现在的问题就是mid和n如何比较?
对于任意一个丑数x,我们能否确定它是第几个丑数吗?
答案是可以的。丑数的定义是能被a或b或c整除的数。那么我们只需要知道x前面能被多少个a,b,c整除(设为cnt),即[x/a]+[x/b]+[x/c].
不过这里有一个问题,假设a=2, b=3,对于6这个数来说,我们多加了一次。因为6是2和3的公倍数。这里就是容斥定理了。不知道的可以百度一下,这里主要讲讲二分枚举。
利用容斥定理可以求出cnt的值。但还是有一个问题。比如第一个样例,6的cnt是5(2+2+1),7的cnt也是5(2+2+1),并不是cnt == n时x就是丑数。也就是说,cnt == n时满足的数有一个区间。
比如满足n=5的数区间为[6,7]. 我们需要取这个区间的左边界。因此这个二分是lower_bound.
下面上代码:

#define ll long long 
class Solution {
public:
	ll gcd(ll a, ll b)
	{
		return b?gcd(b,a%b):a;
	}
    int nthUglyNumber(int n, int a, int b, int c) {
        ll l = 0, r = INT_MAX;
        ll ab = a/gcd(a,b)*b;
        ll ac = a/gcd(a,c)*c;
        ll cb = b/gcd(c,b)*c;
        ll abc = ab/gcd(ab, c)*c; 
        while(l < r)
        {
        	ll mid = l/2+r/2;
        	ll cnt = (mid/a+mid/b+mid/c)-(mid/ab+mid/ac+mid/cb)+mid/abc;
        	if(cnt < n) l = mid+1; 
        	else r = mid;
        }
        return l;
    }
};
SAP SD科目确定:从配置到凭证的财务集成核心 本文深入解析SAP SD科目确定的核心价值与配置实践,涵盖从主数据准备到财务凭证生成的全流程。通过六步配置法和KOFI00过程拆解,帮助企业实现销售与财务模块的高效集成,确保收入、成本等数据准确归集至对应会计科目,提升财务自动化水平与数据准确性。 阅读详情

相关推荐

STM32 W5500 Freemodbus Modbus TCP协议功能实现

STM32F103VCT6 W5500(SPI1),实现Modbus-TCP协议的功能

坚韧与专注 2万+

丑数( 数学思想 | 动态规划 | 二分搜索 )

丑数(数学、动态规划、二分搜索) 丑数Ⅰ 给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。 丑数 就是只包含质因数 2、3 和/ 5 的正整数。(1通常被认为丑数输入:n = 8 输出:true 解释:8 = 2 × 2 × 2 我的解法: 根据题目的描述可以得到下面结论,如果一个数为丑数,那么一定能够被2,3,5轮流整除,最后结果为1。 class Solution { public: bool isUgly(int n) {

qq_46016604的博客 506

基于MATLAB声发射信号的分析 代码源

基于MATLAB声发射信号的分析 代码源。内容包含小波分析,时频分析,傅立叶分析,小波分析,画波形图,能谱系数,聚类分析等程序员。希望能帮助大家

1201. 丑数 III

leetcode力扣刷题打卡 题目:1201. 丑数 III 描述:给你四个整数:n 、a 、b 、c ,请你设计一个算法来找出第 n 个丑数丑数是可以被 a b c 整除正整数 。 解题思路 1、上来就先求最大公约数,最小公倍数; 2、容斥原理,求三个数的最小公倍数有多少个丑数; 2、二分查找; 原代码## typedef long long ll; ll gcd(ll a, ll b) { return b == 0 ? a : gcd(b, a %

qq_32355021的博客 300

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...

Michael是个半路程序员 2921

Leetcode 1201. 丑数 III

nabc,请你设计一个算法来找出第n个丑数丑数是可以被abc整除的。4丑数序列为 2, 3, 4, 5, 6, 8, 9, 10… 其中第 3 个是 4。6丑数序列为 2, 3, 4, 6, 8, 9, 10, 12… 其中第 4 个是 6。10丑数序列为 2, 4, 6, 8, 10, 11, 12, 13… 其中第 5 个是 10。1999999984没有什么思路,一看是中等题,感觉普通的暴力应该过不了,毕竟提供的示例里面就已经有数据比较大的样例了,意思就是告诉你,这题用暴力方法连自测都过不去的。

Don_tknowwhat的博客 1011

LC-1201. 丑数 III(二分法、容斥原理)

难度中等n、a、b、c,请你设计一个算法来找出第n个丑数丑数是可以被abc整除的。

qq_42958831的博客 285

leetcode - 1201. 丑数 III

请你帮忙设计一个程序,用来找出第 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...

然后就去远行 464

1201 丑数 III(二分查找、容斥定理

1. 问题描述: 请你帮忙设计一个程序,用来找出第n个丑数丑数是可以被abc整除正整数示例 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, 10, 12... 其中第 4 个是 6。 示例 3: 输入:n =...

二哈 343

leetcode1201. Ugly Number III丑数3)

二分答案,容斥原理

_ 377

Leetcode 1201:丑数 III(超详细的解法!!!)

请你帮忙设计一个程序,用来找出第 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...

coordinate的博客 1945

LeetCode】1201. 丑数 III

官方链接 请你帮忙设计一个程序,用来找出第n个丑数丑数是可以被ab 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 解释:丑数序列...

Tak-Wah Blog 768

Leetcode-1201丑数III

请你帮忙设计一个程序,用来找出第n个丑数丑数是可以被ab 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...

dayslrk的博客 574

编写一个程序,找出第 n 个丑数

编写一个程序,找出第 n 个丑数丑数就是只包含质因数2, 3, 5 的正整数示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 说明: 1是丑数。 n不超过1690。 题目链接 :https://leetcode-cn.com/problems/ugly-number-ii解题思路: ...

qfc8930858的博客 1000

LeetCode 5198. 丑数 III(Java)容斥原理和二分查找

第 155 场周赛,题解,题目链接,题目,示例,难度中等,提示,时间复杂度,空间复杂度,丑数,容斥原理,二分查找,整除,最大公约数,最小公倍数,gcd,lcm。

wowpH 739

设计一个函数,传入一个数字n,若n可以被3整除的返回1,可以被5整除返回2,可以被7整除返回3...

早上深圳的太阳晒的皮肤贼疼,边走边想着一点事情来转移注意力,忽然间就想到前两天在掘金上看到一个前端面试题,虽说题目出的不是很严谨,但我就想着把他的题目修改下,延伸一下下,先看下图。。。 正如标题看到的,万一这个数即被3整除又被5整除,那该返回多少呢?那我这边想到的是返回12,话不多说,我贴代码了 function Ajust(num) { if ( typeof num ...

weixin_33735077的博客 600

leetcode1

5197.最小绝对差 给你个整数数组arr,其中每个元素都不相同。 请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。 示例 1: 输入:arr = [4,2,1,3] 输出:[[1,2],[2,3],[3,4]] 示例 2: 输入:arr = [1,3,6,10,15] 输出:[[1,3]] 示例 3: 输入:arr = [3,8,-10...

weixin_30954607的博客 219

LeetCoder_____丑数 III(1201)

1. 思路 相比原来的找第n个丑数升级了一些,n很大决定了不能够递推。不过这里有个规律就是随着n增大,0~n里面的丑数个数是递增序列(不下降序列)。所以我们可以将A[i] 表示为0 ~ i中丑数的个数,那么A数组就是一个递增数组;原题就是找A数组中第一个为n的元素下标(其实就是找第n个丑数)。在有序序列里面找一个元素,很容易想到二分。 注意:如何算0~i中有多少个丑数呢?其实就是一个容斥定理 ...

YzlCoder的记事本 424

Leetcode——264.丑数 ||——题解+代码实现(使用三指针进行求解)

一、题目(中等) 编写一个程序,找出第n个丑数丑数就是只包含质因数2, 3, 5的正整数示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 说明: 1是丑数。 n不超过1690。 二、题解思路 题解思路1:在Leetcode——263.丑数的思想下进行循环,找到第n个丑数...

鬼刀 613

【编程题】丑数Ⅲ:涉及二分查找、最大公约数、最小公倍数算法

1、题目: 请你帮忙设计一个程序,用来找出第 n 个丑数丑数是可以被 a b c 整除正整数示例输入:n = 3, a = 2, b = 3, c = 5 输出:4 解释:丑数序列为 2, 3, 4, 5, 6, 8, 9, 10... 其中第 3 个是 4。 提示:1 <= n, a, b, c <= 10^9 2、思路: 首先,为什么第一时间能想到二分法? 让我们观察题目,可以看到,最终状态(即n)的范围非常大。试图自底向上递推是按照通常的自顶向下回溯显然会超时(

个人工作中学到的专业技术与职业发展知识笔记 334

丑数II(编写一个程序,找出第 n 个丑数。)

编写一个程序,找出第 n 个丑数丑数就是只包含质因数 2, 3, 5 的正整数示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 public class test0418 { public static void main(String[] args) { Solut...

be_gin_ner的博客 604
上一篇: 【codeforces】sweet Problem (规律,二分)
下一篇: Can you solve this equation? (二分)
Skyed.blue
博客等级 码龄7年 116粉丝 164原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值