3185. 构成整天的下标对数目 II-示例 2:

时间:2024-10-27 08:05:07
输入: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;  // 返回最终的结果
    }
};

代码解析