当前位置: 首页 > news >正文

leetcode1201. 丑数 III -medium

1 题目:1201. 丑数 III.

官方标定难度:中

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

给你四个整数:n 、a 、b 、c ,请你设计一个算法来找出第 n 个丑数。

示例 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 = 5, a = 2, b = 11, c = 13
输出:10
解释:丑数序列为 2, 4, 6, 8, 10, 11, 12, 13… 其中第 5 个是 10。

提示:

1 < = n , a , b , c < = 10 9 1 <= n, a, b, c <= 10^9 1<=n,a,b,c<=109
1 < = a ∗ b ∗ c < = 10 18 1 <= a * b * c <= 10^{18} 1<=abc<=1018
本题结果在 [ 1 , 2 ∗ 10 9 ] [1, 2 * 10^9] [1,2109] 的范围内

2 solution

本题数据规模很大,缺乏高效的递推公式,但是答案又是要验证的而且具有连续性,所以可以用二分法。

代码

class Solution {/** 二分法*/long long gcd(long long x, long long y) {if (y == 0) return x;return gcd(y, x % y);}public:int nthUglyNumber(int n, int a, int b, int c) {long long l = 1, r = 2e9;long long ab = 1ll * a * b / gcd(a, b);long long ac = 1ll * a * c / gcd(a, c);long long bc = 1ll * b * c / gcd(b, c);long long abc = 1ll * ab / gcd(ab, bc) * bc ;while (l < r) {long long mid = (l + r) >> 1;long long m = mid / a + mid / b + mid / c - mid / ab - mid / bc - mid / ac + mid / abc;if(m >= n) r = mid;else l = mid + 1;}return r;}
};

结果

在这里插入图片描述

相关文章:

  • weibo_comment_pc_tool: 微博评论采集软件工具,根据wb帖子链接爬评论
  • 调用Gensim库训练Word2Vec模型
  • Predixy的docker化
  • Linux的调试器--gbd/cgbd
  • 数据清理的例子
  • 【计算机网络】传输层TCP协议——协议段格式、三次握手四次挥手、超时重传、滑动窗口、流量控制、
  • 【Golang进阶】第八章:并发编程基础——从Goroutine调度到Channel通信实战
  • CentOS 7 环境下部署 LAMP
  • Go语言通道如何实现通信
  • 计算机网络 HTTP篇常见面试题总结
  • Vert.x学习笔记-EventLoop工作原理
  • 使用ssh-audit扫描ssh过期加密算法配置
  • day14 leetcode-hot100-27(链表6)
  • Telerik生态整合:Kendo UI for Angular组件在WinForms应用中的深度嵌入(一)
  • Edmonds-Karp详解-基于BFS的最短增广路径
  • 【仿生机器人】仿生机器人认知-情感系统架构设计报告
  • 抽奖系统抽奖活动管理流程
  • 基于 KubeKey 3.1.9,快速部署 K8s 1.33.0 高可用集群
  • quasar electron mode如何打包无边框桌面应用程序
  • 代码随想录算法训练营 Day60 图论Ⅹ Bellmen_ford 系列算法
  • 网站采集注意/网络seo首页
  • 上栗县建设局网站/网站内容编辑
  • 六安论坛招聘网最新招聘/北京seo招聘
  • 可以做积分的网站/seo分析报告
  • 新手怎么做自己网站广告/关键词有哪些?
  • 动态网站设计与实现论文/厦门seo排名优化公司