Leetcode—2749. 得到整数零需要执行的最少操作数【中等】(__builtin_popcountl)

2025每日刷题(231)

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

实现代码

cpp 复制代码
class Solution {
public:
    int makeTheIntegerZero(int num1, int num2) {
        for(long opt = 0; opt <= 60; ++opt) {
            const long target = num1 - num2 * opt;
            // __builtin_popcountl(target) 返回 target 的 汉明重量,即 target 二进制表示中 1 的个数。
            // target 不能是负数(否则已经把 num1 减过头了);
            // 用恰好 ops 个 2^i 相加得到 target 时,必须有 target 至少为 ops,因为每个 2^i ≥ 1,ops 个这样的数相加的最小和是 ops(全取 2^0 = 1)。
            /*
            若只检查 popcount(target) <= ops 而不检查 ops <= target:
比如 target = 1, ops = 2。
popcount(1) = 1 <= 2 成立,但不可能用两项正的 2^i 凑出 1(最小也得是 1+1=2)。ops <= target 能正确排除这类情况。

若 target < 0:
明显无解(已经把 num1 减过头了)。ops <= target 也会直接判假(因为 ops >= 0),从而排除负数情况。*/
            if(__builtin_popcountl(target) <= opt && target >= opt) {
                return opt;
            }
        }
        return -1;
    }
};

运行结果

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

相关推荐
雪度娃娃几秒前
转向现代C++——在创建对象时注意区分()和{}
开发语言·c++
吴可可1233 分钟前
用Bulge保持多段线圆弧连续性
算法·c#
Tisfy3 分钟前
VSCode Docker(Code Server)首次调试C++长时间下载debuginfo问题
c++·vscode·docker
读书札记202211 分钟前
C++ switch..case语句中变量跨域问题探讨及解决方法
开发语言·c++
qq_2965532713 分钟前
矩阵逆时针旋转90度:三种解法从入门到精通
数据结构·python·算法·面试·矩阵
声声codeGrandMaster16 分钟前
seq2seq概念和数据集处理
人工智能·pytorch·python·算法·ai
努力努力再努力wz18 分钟前
【Redis入门系列】Redis基础命令详解:从客户端连接到数据读写、key 管理与过期机制
c语言·开发语言·数据结构·数据库·c++·redis·缓存
谙弆悕博士20 分钟前
【附C源码】C语言实现散列表
c语言·开发语言·数据结构·算法·散列表·数据结构与算法
Peter·Pan爱编程21 分钟前
输入输出:iostream 为什么不是 printf 的替代品
c++·输入输出·c++基础·iostream
kkeeper~23 分钟前
0基础C语言积跬步之深入理解指针(5上)
c语言·开发语言·算法