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

leetcode 2749. 得到整数零需要执行的最少操作数 中等

给你两个整数:num1 和 num2 。

在一步操作中,你需要从范围 [0, 60] 中选出一个整数 i ,并从 num1 减去 2^i + num2 。

请你计算,要想使 num1 等于 0 需要执行的最少操作数,并以整数形式返回。

如果无法使 num1 等于 0 ,返回 -1 。

示例 1:

输入:num1 = 3, num2 = -2
输出:3
解释:可以执行下述步骤使 3 等于 0 :
- 选择 i = 2 ,并从 3 减去 22 + (-2) ,num1 = 3 - (4 + (-2)) = 1 。
- 选择 i = 2 ,并从 1 减去 22 + (-2) ,num1 = 1 - (4 + (-2)) = -1 。
- 选择 i = 0 ,并从 -1 减去 20 + (-2) ,num1 = (-1) - (1 + (-2)) = 0 。
可以证明 3 是需要执行的最少操作数。

示例 2:

输入:num1 = 5, num2 = 7
输出:-1
解释:可以证明,执行操作无法使 5 等于 0 。

提示:

  • 1 <= num1 <= 10^9
  • -10^9 <= num2 <= 10^9

分析:从 1 开始,枚举操作次数 k 的值,对于每 k 次操作,可以看做 num1 先减去 k 个 num2,再判断这个值能否由 k 个 2 的幂组成。不妨令 x = num1 - k * num2,假设操作次数为 k 时得到 x ,它的二进制表示下有 f(x) 个 1,如果 k 符合题意,需要满足下面的条件:

1、k <= x,这是 k 的上限,当 k 大于 x 时,无论如何不可能凑出 k 个 2 的幂之和等于 x。

2、k >= f(x),至少需要 f(x) 个 2 的幂之和,才能通过求和凑出 x,k 可以大于 f(x),因为 2^i=2^(i-1)*2

上面 2 条就是枚举的终止条件。接下来继续观察 x,当 k=0 时,x>k,且 x 随着 k 的增加而单调递减。因此在增加 k 时,如果出现了 x<k 的情况,随着 k 继续增大,x<k 始终满足。因此在第一次出现 x<k 时,我们就可以判定此题无解,提前返回 −1。

int makeTheIntegerZero(int num1, int num2) {int k = 1;while (1) {long long x = (long long)num1 - (long long)num2 * k;if (x < k) {return -1;}if (k >= __builtin_popcountll(x)) {return k;}k++;}
}

http://www.xdnf.cn/news/20152.html

相关文章:

  • 邪修实战系列(1)
  • 使用CI/CD部署项目(前端Nextjs)
  • SQL Server事务隔离级别
  • JavaScript 面向对象 原型和原型链 继承
  • 西嘎嘎学习-day 1
  • 栈:有效的括号
  • Dify-CHATflow案例
  • JS中的String的常用方法
  • Process Explorer 学习笔记(第三章3.2.3):工具栏与参考功能
  • 知微集:Python中的线程(三)
  • JavaScript 中的并发编程实践与误区:一次深入的探讨
  • 软考高级 — 系统规划与管理师考试知识点精要
  • 电脑活动追踪全解析:六款软件助企业实现数字化精细管理
  • whl编译命令作用解释
  • 【完整源码+数据集+部署教程】加工操作安全手套与手部检测系统源码和数据集:改进yolo11-cls
  • mysq集群高可用架构之组复制MGR(单主复制-多主复制)
  • 2025 年 8 个最佳网站内容管理系统(CMS)
  • 小迪安全v2023学习笔记(七十八讲)—— 数据库安全RedisCouchDBH2database未授权CVE
  • LeetCode 刷题【65. 有效数字】
  • 机器学习算法介绍二
  • postgresql 通过dblink实现 跨库查询
  • PostgreSQL收集pg_stat_activity记录的shell工具pg_collect_pgsa
  • zoho crm notes add customer fields
  • 数字人打断对话的逻辑
  • 本地 Ai 离线视频去水印字幕!支持字幕、动静态水印去除!
  • python-虚拟试衣
  • LVS、Nginx与HAProxy负载均衡技术对比介绍
  • 任意齿形的齿轮和齿条相互包络工具
  • Linux常见命令总结 合集二:基本命令、目录操作命令、文件操作命令、压缩文件操作、查找命令、权限命令、其他命令
  • Process Explorer 学习笔记(第三章3.2.5):状态栏信息详解