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

leetcode2749. 得到整数零需要执行的最少操作数-medium

1 题目:得到整数零需要执行的最少操作数

官方标定难度:中

给你两个整数:num1 和 num2 。

在一步操作中,你需要从范围 [0, 60] 中选出一个整数 i ,并从 num1 减去 2i + 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 < = n u m 1 < = 1 0 9 1 <= num1 <= 10^9 1<=num1<=109
− 1 0 9 < = n u m 2 < = 1 0 9 -10^9 <= num2 <= 10^9 109<=num2<=109

2 solution

如果 k 次可以完成的话则有:
n u m 1 = ∑ j = 1 k 2 i j + k ∗ n u m 2 num_1 = \sum_{j = 1}^{k}2^{i_j} + k * num_2 num1=j=1k2ij+knum2
所以如果每次用 n u m 1 num_1 num1 减去 n u m 2 num_2 num2 ,如果第 k 次剩余的数 m 能被 k 个2 的次方表示,则 k 就是答案。那怎么确定是否可以呢?这要求此时的 m 的二进制中最多有 k 个 1 并且 m 还要大于等于 k。

代码

class Solution {/** num1 = sum(2**i) + k * num2*/
public:int makeTheIntegerZero(int num1, int num2) {long long y = num1;for (int i = 1;; i++) {y -= num2;if (y < i) return -1;long long x = y;int c = 0;for (; x; x >>= 1) c += x & 1;if (c <= i && c ) return i;}}
};

结果

在这里插入图片描述

http://www.dtcms.com/a/195510.html

相关文章:

  • 第二十六天打卡
  • python版本管理工具-pyenv轻松切换多个Python版本
  • 求职困境:开发、AI、运维、自动化
  • Java Set系列集合详解:HashSet、LinkedHashSet、TreeSet底层原理与使用场景
  • YOLO+UI(C#)开发
  • 基于MATLAB-GUI图形界面的数字图像处理
  • 服务培训QDA 的安装调试方法,硬件模块的讲解和软件控制台使用及系统测试
  • R1 快开门式压力容器操作证备考练习题及答案
  • java输入输出类
  • 如何排查阻塞语句
  • 【Linux】iptables 命令详解
  • dify知识库支持图文回复实践
  • STM32H743IIT6_ADC采集误差分析与ADC_DMA
  • Stainer Chain的镜像对称性的充分必要条件
  • 建筑设计单位的数据安全如何保护?天锐蓝盾针对性解决方案
  • 【AI模型部署】
  • Linux-进程概念(一)
  • Web-CSS入门
  • 优雅使用Gunicorn进程管理FastAPI
  • buuctf Crypto-摩丝1
  • 矫平机技术新维度:材料科学、数字孪生与零缺陷制造
  • QML 动画控制、顺序动画与并行动画
  • 【Linux网络】网络套接字编程
  • Python循环控制
  • 模板分享:网络最小费用流
  • 费曼技巧及提高计划
  • c++,linux,多线程编程详细介绍
  • 2025 Adobe Acrobat DC安装教程
  • 天能股份SAP系统整合实战:如何用8个月实现零业务中断的集团化管理升级
  • Python模块化编程进阶指南:从基础到工程化实践