输入:hours = [72, 48, 24, 3]
输出:3
解释:构成整天的下标对包括 (0, 1), (0, 2), 和 (1, 2)。
解题思路
这道题可以通过使用哈希表来优化查找过程,避免暴力遍历所有可能的下标对。我们将每个小时数与 24 取模,记录每个余数的出现次数,从而快速计算出符合条件的下标对。
代码实现
class Solution {
public:
long long countCompleteDayPairs(vector<int>& hours) {
unordered_map<int, int> cnt; // 用于记录每个余数的出现次数
long long res = 0; // 结果变量,统计满足条件的下标对数
for (int hour : hours) {
int remainder = hour % 24; // 计算当前小时数的余数
int needle = (24 - remainder) % 24; // 计算与之相加为 24 的补数
// 如果补数存在于哈希表中,则加上对应的出现次数
res += cnt[needle];
// 更新当前余数的计数
cnt[remainder]++;
}
return res; // 返回最终的结果
}
};