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

【算法】快速求出 n 最低位的 1

Leetcode 2438. 二的幂数组中查询范围内的乘积

先展示算法具体实现

while (n) {
    int lowbit = n & (-n);
    powers.push_back(lowbit);
    n ^= lowbit;
}

这段代码的核心是通过 n & (-n) 计算出 n最低位的 1(即最右边的 1)

  • -nn二进制补码表示。对于任意整数 n-n 等于 ~n + 1,也就是对 n 取反然后加 1。
  • n & (-n) 的效果是提取 n 中最右边的 1 对应的那个值。例如,如果 n12(二进制是 1100),那么 -n4(二进制是 0100),n & (-n) 就是 4,即 n 中最低的 1 代表的值。

第四行:n ^= lowbit 则是通过异或运算(^)将 n 中的最低位的 1 清除掉,以继续统计后续的高位的 1 。

看题解的时候发现方法非常巧妙,由此记录。


http://www.kler.cn/a/413128.html

相关文章:

  • CTF之密码学(BF与Ook)
  • Http文件上传
  • 【C++】读取数量不定的输入数据
  • STM32端口模拟编码器输入
  • 误删了照片,甚至对存储卡进行了格式化 都可以找到丢失的图片,并让您恢复它们 支持一键恢复或永久删除丢失的照片、视频、音乐、文档等-供大家学习研究参考
  • Python办公自动化案例:将演示文稿批量导出为图片和PDF文件
  • 【大数据学习 | Spark-SQL】Spark-SQL编程
  • 如何做好一份技术文档?
  • 新型大语言模型的预训练与后训练范式,阿里Qwen
  • 网络安全审计机制与实现技术
  • Unity3D Lua如何支持面向对象详解
  • 使用 pycharm 新建不使用 python 虚拟环境( venv、conda )的工程
  • 摄像头原始数据读取——gstreamer(gst_parse_launch)
  • UI设计-色彩、层级、字体、边距(一)
  • java脚手架系列16-AI大模型集成
  • 使用Hutool读取大Excel
  • C++学习日记---第14天(蓝桥杯备赛)
  • 前端实现把整个页面转成PDF保存到本地(DOM转PDF)
  • 梧桐数据库的高效索引技术分析
  • Rust语言俄罗斯方块(漂亮的界面案例+详细的代码解说+完美运行)
  • 前端框架 react 性能优化
  • 【网络安全设备系列】10、安全审计系统
  • 在WSL 2 (Ubuntu 22.04)安装Docker Ce 启动错误解决
  • 【H2O2|全栈】Node.js(1)
  • 5G Multicast/Broadcast Services(MBS) (五)
  • (计算机网络)期末