【LeetCode】2749. 得到整数零需要执行的最少操作数 - 实践

2749. 得到整数零需执行的最少操作数

题目描述

在这里插入图片描述

题目分析

根据题目描述,需要计算n u m 1 − ( 2 i + n u m 2 ) num_1-(2^i+num_2)num1(2i+num2)经过多少次运算可以变成0。
进一步列等式,假设,最少经过n nn次,可以得到值为0

  1. a 0 − 2 x 1 − b = a 1 a_0-2^{x_1}-b=a_1a02x1b=a1
  2. a 1 − 2 x 2 − b = a 2 a_1-2^{x_2}-b=a_2a12x2b=a2
  3. . . . ......
  4. a n − 2 x n − b = 0 a_n-2^{x_n}-b=0an2xnb=0

合并为a 0 − n b = 2 x 1 + 2 x 2 + . . . + 2 x n a_0-nb=2^{x_1}+2^{x_2}+...+2^{x_n}a0nb=2x1+2x2+...+2xn,其中x ∈ [ 0 , 60 ] x \in [0,60]x[0,60],则2 x 1 + 2 x 2 + . . . + 2 x n ≥ n 2^{x_1}+2^{x_2}+...+2^{x_n} \geq n2x1+2x2+...+2xnn

首先,等式要成立,a 0 − n b ≥ n a_0-nb\geq na0nbn,如果左边小于n,则无论如何都不可能满足。
再次,从二进制角度来分析等式左右两边等于的可能性

  1. n=1,右边最多只有一个1,而左边有可能1的数量不定
  2. n=2,右边最多只有两个1,可以表示,有1或2个1的数
  3. 通过n=3,右边最多只有三个1,能够表示,有1、2或3个1的数
  4. . . . ......
  5. 通过可得,n个1,能够表示存在1 , 2 , . . . , n {1,2,...,n}1,2,...,n个1的数,即等式成立

所以,可以测得一个判断条件,a 0 − n b ≥ n   a n d   b i t s ( a 0 − n b ) ≤ n a_0-nb\geq n \ and \ bits(a_0-nb) \leq na0nbnandbits(a0nb)n,即等式成立,代表最少n次可以满足题目条件

代码

class Solution
{
public:
int makeTheIntegerZero(int num1, int num2) {
long long num = num1-(long long)num2;
if(num <
0) return -1;
int len=0;
for(int i=1;
true;i++)
{
if(num< i) return -1;
if(num>=i &&
__builtin_popcountll(num) <= i) return i;
num -= (long long)num2;
if(num <
0) return -1;
}
return -1;
}
};
posted @ 2025-09-11 19:22  wzzkaifa  阅读(12)  评论(0)    收藏  举报