tips
前缀和
- 快速查找某个区间内相加(减)、相乘(除)、异或等运算结果,有结合律和交换律的一些运算。
- 计算子数组的个数一般会用 map 来记录某个值出现的次数。
两数相加之后判断能否被一个数整除
相加后判断能否被 24 整除。
原理:利用 hash 表记录之前遍历的数的模数,然后对比当前所需要的模数是否在 hash 表中出现过,如果出现过,则说明存在两个数相加后能被 24 整除。
// 哈希表记录
const hours = [12, 12, 30, 24, 24];
const cnt = new Map();
let ans = 0;
for (const h of hours) {
const cur = (24 - (h % 24)) % 24; // 寻找凑对后能被整除的凑对数的模数
if (cnt.has(cur)) {
ans += cnt.get(cur);
}
cnt.set(h % 24, (cnt.get(h % 24) || 0) + 1);
}
return ans;