跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言算法

2438. 二的幂数组中查询范围内的乘积 - 位运算解法

综述由AI生成LeetCode 第 2438 题“二的幂数组中查询范围内的乘积”的解决方案。核心思路是利用位运算提取整数 n 的二进制表示中的幂次项,构建前缀乘积数组以支持快速范围查询。代码提供了 C++、Java 和 Go 三种语言的实现,时间复杂度为 O(m + log²n),其中 m 为二进制位数。通过预处理避免重复计算,满足模数 10^9+7 下的乘积查询需求。

热情发布于 2026/3/22更新于 2026/6/628 浏览

题目:2438. 二的幂数组中查询范围内的乘积

题目截图

解题思路图

思路:位运算,时间复杂度 O(m + log n * log n)。

C++ 版本:

class Solution {
public:
    vector<int> productQueries(int n, vector<vector<int>>& queries) {
        int mod = 1000000007;
        // 得到元素 n 二进制形式的数组
        vector<int> v;
        while (n != 0) {
            // n&-n 得到的是 n 的最低位
            v.push_back(n & -n);
            n ^= (n & -n);
        }
        int m = v.size();
        // 预处理出所有可能的范围,时间复杂度 O(log n * log n)
        vector<vector<int>> f(m + 1, vector<int>(m + 1, 1));
        for (int i = 1; i <= m; i++) {
            f[i][i] = v[i - 1];
            for (int j = i + 1; j <= m; j++) {
                f[i][j] = (1LL * f[i][j - 1] * v[j - 1]) % mod;
            }
        }
        vector<int> ans;
        for (auto query : queries) {
            ans.push_back(f[query[0] + 1][query[1] + 1]);
        }
        return ans;
    }
};

JAVA 版本:

class Solution {
    public int[] productQueries(int n, int[][] queries) {
        int mod = 1000000007;
        List<Integer> v = new ArrayList<>();
        while (n != 0) {
            v.add(n & -n);
            n ^= (n & -n);
        }
        int m = v.size();
        long[][] f = new long[m + 1][m + 1];
        for (int i = 1; i <= m; i++) {
            f[i][i] = v.get(i - 1);
            for (int j = i + 1; j <= m; j++) {
                f[i][j] = (1L * f[i][j - 1] * v.get(j - 1)) % mod;
            }
        }
        int[] ans = new int[queries.length];
        for (int i = 0; i < queries.length; i++) {
            ans[i] = (int) f[queries[i][0] + 1][queries[i][1] + 1];
        }
        return ans;
    }
}

GO 版本:

func productQueries(n int, queries [][]int) []int {
    mod := 1000000007
    v := []int{}
    for n != 0 {
        lowbit := n & -n
        v = append(v, lowbit)
        n ^= lowbit
    }
    m := len(v)
    f := make([][]int, m+1)
    for i := range f {
        f[i] = make([]int, m+1)
    }
    for i := 1; i <= m; i++ {
        f[i][i] = v[i-1]
        for j := i + 1; j <= m; j++ {
            f[i][j] = (f[i][j-1] * v[j-1]) % mod
        }
    }
    ans := make([]int, len(queries))
    for i := 0; i < len(queries); i++ {
        ans[i] = f[queries[i][0]+1][queries[i][1]+1]
    }
    return ans
}

目录

  1. 题目:2438. 二的幂数组中查询范围内的乘积
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenCV 中使用 inRange 进行 HSV 阈值操作
  • Python 爬虫实战:跨境电商数据采集与代理 IP 策略
  • YOLO26:实时目标检测的关键架构改进与性能基准测试
  • 基于 Django 框架的物流车辆预约平台设计与实现
  • 飞算 JavaAI:智能引导与协同交互驱动的 Java 开发提效实践
  • 工业级存储芯片 CSNP32GCR01-AOW 在无人机飞控系统中的应用实践
  • 基于云服务器部署 Clawdbot 实现 Telegram 机器人自动回复
  • 基于火山引擎即梦 API 的数字人视频生成示例
  • 论文阅读:Vision-Language-Action (VLA) 模型概念、进展与应用挑战
  • Discord 机器人创建与配置完整流程
  • ezdxf 库实战:使用 Python 进行 CAD 图纸自动化处理
  • AI 开发工具与学习资源指南:涵盖视频、文案及模型应用
  • DeepMind 科学家:“模型即计算机”才是 AI 未来新范式
  • 蚂蚁金服 Java 后端面试经历:一面与二面问题汇总
  • Telegram 搜索机器人搭建指南(含 Python 脚本)
  • 985 硕士研究生自媒体副业复盘:4 月收入 7975 元及运营经验总结
  • Proxmox VE (PVE) 下载和安装 Kali Linux 教程
  • 无人机视觉任务常用数据集汇总:检测与分割资源整理
  • 通用 FPGA 开发流程详解:从设计定义到板级验证
  • AIGC 时代:利用大模型辅助编程入门与实践

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online