2438. 二的幂数组中查询范围内的乘积
题目链接:2438. 二的幂数组中查询范围内的乘积
代码如下:
cpp
class Solution {
public:
vector<int> productQueries(int n, vector<vector<int>>& queries) {
const int MOD = 1'000'000'007;
// 例如二进制 1100 分解为 100 + 1000
// 第一轮循环 lowbit(1100) = 100,然后 1100 ^ 100 = 1000
// 第二轮循环 lowbit(1000) = 1000,然后 1000 ^ 1000 = 0,循环结束
vector<int> powers; // 存储 n 的二进制位对应的 2 的幂次方
while (n) {
int lowbit = n & -n; // 计算最低位的 1
powers.push_back(lowbit); // 将最低位的 1 对应的 2 的幂次方加入数组
n ^= lowbit; // 去掉最低位的 1
}
vector<int> res; // 存储结果
res.reserve(queries.size());//预分配空间
for (auto& q : queries) {
long long mul = 1;
for (int j = q[0];j <= q[1];j++) {
mul = mul * powers[j] % MOD; // 计算区间内的乘积
}
res.push_back(mul); // 将结果加入数组
}
return res;
}
};