【LeetCode】878. 第 N 个神奇数字

news2024/11/27 0:38:44

题目描述

一个正整数如果能被 a 或 b 整除,那么它是神奇的。
给定三个整数 n , a , b ,返回第 n 个神奇的数字。因为答案可能很大,所以返回答案 对 109 + 7 取模 后的值。

示例 1:

输入:n = 1, a = 2, b = 3
输出:2

示例 2:

输入:n = 4, a = 2, b = 3
输出:6

提示:

1 <= n <= 109
2 <= a, b <= 4 * 104

方法一:二分查找+容斥原理

class Solution {
public:
    const int MOD = 1e9 + 7;
    int nthMagicalNumber(int n, int a, int b) {
        long lcm = std::lcm(a, b); // 计算a和b的最小公倍数
        // 二分上界为a,b中较小值的 n 倍
        // 此时能够保证最少有 n 个神奇数字
        long left = 0, right = (long) min(a,b) * n; // 开区间
        while(left + 1 < right){
            long mid = (left + right) / 2;
            if(mid / a - mid / lcm + mid / b < n){
	            // 增大下界 left = mid
                left = mid;
            }
            else{
                // 减小上界
                right = mid;
            }
        }
        return right % MOD;
    }
};

心得

  • 今天时间比较赶,看了困难就没打算自己敲了,不过看到题目提示了暴力求解可能会出现TLE,有想到前几天一道题目,[ 891.子序列宽度之和 ],果然, 这道题也是要用二分查找的方法,今天听了灵神的视频把二分查找学会了,希望下次可以自己敲出来。
  • 方法:二分查找+容斥原理
    具体思路看下面的图解,很清晰了。
    主要讲一下需要注意的几个点:

    • 求解最小公倍数有函数lcm,不过使用的时候记得要std::lcm(),前面的std不可以缺少;
    • 以后遇到数字很大的情况,记得要灵活使用long的数字类型
  • 解释一下:为什么二分循环结束时,得到的一定是一个神奇数字?
    答:设答案为 x,循环结束时,≤ x 的神奇数字有 n 个,而 ≤x−1 的神奇数字不足 n 个(可结合视频中的红蓝染色来理解)。只有当 x 是一个神奇数字时,才会出现这种情况。
    这也同时说明,在二分循环中,我们不能在计算结果恰好等于 n 的时候,直接返回答案,而是要继续二分。

在这里插入图片描述

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

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

相关文章

stm32cubemx hal学习记录:FreeRTOS互斥量

一、互斥量 1、互斥量用于互锁&#xff0c;可以充当资源保护的令牌&#xff0c;当一个任务希望访问某个资源时&#xff0c;它必须先获取令牌&#xff0c;当任务使用完资源后&#xff0c;必须返还令牌&#xff0c;以便其他任务可以访问该资源。 2、互斥量一般用于临界资源保护…

[附源码]计算机毕业设计JAVA教师档案管理系统

[附源码]计算机毕业设计JAVA教师档案管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

LabVIEW通信-CAN

文章目录CANcan总线特点位定位与同步标识符检验滤波报文传输类型CAN CAN属于OSI的物理层与数据链路层 can总线特点 网络各节点之间的数据通信实时性强 开发周期短 结构简单&#xff08;只有两根线与外部相连&#xff0c;内部继承了错误探测和管理模块&#xff09; 数据通信没…

Spring IOC

一、为什么要使用Spring&#xff1f; Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发&#xff0c;并通过POJO为基础的编程模型促进良好的编程习惯。 为…

RPA案例|云扩助力保险行业开启超自动化运营新阶段

近五年&#xff0c;全球平均保险深度总体呈小幅平稳下降趋势&#xff0c;2021年中国保险深度为4.15%&#xff0c;全球平均保险深度为5.96%&#xff0c;而美国、英国等发达国家的保险深度则保持在10%以上&#xff0c;中国保险深度仍然具有很大的上升空间。 为进一步拓展增量空间…

软考是什么?---2023年软考最全解析

软考是什么&#xff1f; 软考全称为&#xff1a;计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff0c;发证机构为国家人力资源和社会保障部、工业和信息化部&#xff0c;简称为&#xff1a;人社部和工信部。中日韩三国互认&#xff0c;证书的含金量很高…

Navicat操作数据库与Mysql常见命令操作实战

一&#xff1a;Navicat下载与安装 官网下载链接&#xff1a;Navicat 下载完后直接安装即可 二&#xff1a;数据库的连接 1.打开Navicat软件&#xff0c;点击左上角连接按钮&#xff0c;选择mysql数据库 输入完成后双击连接名&#xff0c;连接成功后&#xff0c;小海豚变绿色 …

Advances in Graph Neural Networks笔记5:Dynamic Graph Neural Networks

诸神缄默不语-个人CSDN博文目录 本书网址&#xff1a;https://link.springer.com/book/10.1007/978-3-031-16174-2 本文是本书第五章的笔记。 懒得看了&#xff01;反正我也不是做这个的。以后要是真的去做动态图了也不是没资源找&#xff0c;这个我懒得看了&#xff0c;就写一…

CentOS 7安装Redis+Springboot整合Redis

1、虚拟环境条件&#xff1a; 已安装VMwareVMware Tools 使用的是视图界面并配置了基本开发环境&#xff0c;参照超详细VMware安装CentOs图文教程_Sq夏颜的博客-CSDN博客 2、直接把已经下载好的redis安装包拖进来&#xff0c;下载地址&#xff1a;CRUG网站 3、解压 tar -zxv…

美国fba海运清关基本流程

美国fba海运清关是美国物流运输的重要组成部分&#xff0c;准备好清关材料和正确流程是确保货物安全快速进口到美国的关键。虽然很多客户会选择双清包税的方式&#xff0c;但是当跨境电商越来越大的时候&#xff0c;双清包税的成本也会相应增加。选择自税不包清关&#xff0c;按…

react配置项目路径别名@

为什么有的项目引入路径写可以&#xff0c;自己的不行呢&#xff1f; 因为别人的项目是配置过路径别名的&#xff0c;就表示src目录&#xff0c;因此我们也需要配置一遍&#xff0c;以下是react项目示范&#xff0c;vue项目同理。 ts对指向src目录的提示是不支持的&#xff0…

Linux命令学习之原来最简单的ls命令这么复杂

ls命令的使用格式如下 ls [选项] [具体的文件] # [] 表示可选 直接在命令行输入ls将当前目录下的列出当前目录下的文件和目录。 1 2 $ls LICENSE README.md hello.c 也可以指定具体的目录和文件 1 2 3 $ls / bin dev home lib32 libx32 mnt proc run srv tmp …

Kotlin 基础学习笔记第七章——运算符重载及其他约定

如你所知&#xff0c;java在标准库中有一些与特定的类相关联的语言特性。例如&#xff0c;实现java.lang.Iterable接口的对象可以在for循环中使用&#xff1b;实现了java.lang.AutoCloseable接口的对象可以在try-with-resource语句中使用。 一、重载算术运算符 1、重载二元运算…

IIC的使用

借鉴于&#xff1a;蓝桥杯嵌入式快速通关篇&#xff0c;IIC通讯及EEPROM_穿上我的格子衫的博客-CSDN博客 IIC原理超详细讲解---值得一看_Z小旋的博客-CSDN博客_iic 总线空闲&#xff1a;SDA 1,SCL 1; 启动信号&#xff1a;SCL 1,SDA 1 -> 0; 停止信号&#xff1a;SCL …

【王道计算机网络笔记】物理层-通信基础

文章目录物理层接口特性典型的数据通信模型数据通信相关术语三种通信方式&#xff08;交互方式&#xff09;串行传输&并行传输&#xff08;数据传输方式&#xff09;同步传输&异步传输码元速率带宽失真失真的一种现象——码间串扰奈氏准则&#xff08;奈奎斯特定理&…

矩阵股份上市首日跌破发行价:振幅达10%,王冠为实际控制人

11月22日&#xff0c;矩阵纵横设计股份有限公司&#xff08;下称“矩阵股份”&#xff0c;SZ:301365&#xff09;在深圳证券交易所创业板上市。本次上市&#xff0c;矩阵股份的发行价为34.72元/股&#xff0c;发行数量为3000万股&#xff0c;募资总额约为10.42亿元&#xff0c;…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.15 SpringBoot 整合 task

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.15 SpringBoot 整合 task5.15.1 SpringBoot 整合 …

对zygote的理解

一、 zygote的作用 启动SystemServer SystemServer需要用于zygote准备好的一些系统资源&#xff0c;比如常用类、注册的JNI函数、主题资源、共享库等等&#xff0c;直接从zygote那继承过来&#xff0c;SystemServer就不用重新再加载一遍&#xff0c;这样对性能有很大的提升。 …

CRM系统中联系人管理的十大好处

联系人管理通常是你的CRM策略中的一个关键部分。它是存储和组织联系人数据以便于访问的做法。简而言之&#xff0c;就是管理联系人数据的过程。如今联系人管理已内置到 CRM 系统中。因此&#xff0c;我们可以考虑利用系统软件将以下优点应用于联系人管理中。 1、更好、更持久的…

Matplotlib用法使用、Matplotlib绘图作图画图

一、Matplotlib Matplotlib&#xff1a;专门用于开发2D或3D图表&#xff0c;以渐进、交互式方式实现数据可视化 可视化是在整个数据挖掘的关键辅助工具&#xff0c;可以清晰的理解数据&#xff0c;从而调整我们的分析方法 能将数据进行可视化&#xff0c;更直观的呈现使数据…