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

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;
	}
};