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

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

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

热情发布于 2026/3/22更新于 2026/7/3045 浏览

题目: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. 二的幂数组中查询范围内的乘积
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Arduino BLDC 模糊动态任务调度机器人
  • Python for 循环详解与实战案例
  • Unity 编辑器扩展开发指南
  • 前端数据埋点技术解析
  • 知网 AIGC 检测算法升级规则解读及应对策略
  • OpenAI 国会指控 DeepSeek“非法蒸馏”,字节发布 Seedance 2.0,Java 26 预览版来了
  • 10 个实用的 Python 自动化办公脚本示例
  • CPP Summit 2020 学习笔记:系统架构与设计
  • Python 窗体编程技术详解
  • LeetCode 罗马数字转整数
  • Ollama Windows 安装与使用指南:本地运行 Llama、DeepSeek 等大模型
  • JavaWeb 基础:动静网页、URL 结构与 HTTP 协议
  • LLM 大语言模型进化路线与领域微调技术应用
  • SpringBoot 整合 Neo4j 图数据库实战指南
  • 双指针算法实战:复写零与四数之和
  • Spring Boot 集成 WebSocket 实现实时推送
  • llama.cpp Docker 部署:容器化推理服务搭建
  • Python 实战:FastAPI + SQLite3 + Requests 接口开发教程
  • 使用 LLaMA-Factory 微调 Qwen2.5 模型并转换为 GGUF 格式部署
  • Open Notebook 与本地 AI:离线环境下使用开源模型

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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