给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < j 且 hours[i] + hours[j] 构成 整天 的下标对 i, j 的数目。
整天 定义为时间持续时间是 24 小时的 整数倍 。
例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。
示例 1:
输入: hours = [12,12,30,24,24]
输出: 2
解释:
构成整天的下标对分别是 (0, 1) 和 (3, 4)。
示例 2:
输入: hours = [72,48,24,3]
输出: 3
解释:
构成整天的下标对分别是 (0, 1)、(0, 2) 和 (1, 2)。
提示:
1 <= hours.length <= 5 * 105^55
1 <= hours[i] <= 109^99
枚举hours,将数值取余保存在哈希表中,枚举时在哈希表里检查是否有构成整天的数对:
cpp
class Solution {
public:
long long countCompleteDayPairs(vector<int>& hours) {
long long ans = 0;
unordered_map<int, int> cnt;
for (int i = 0; i < hours.size(); ++i) {
int target = (24 - hours[i] % 24) % 24;
if (cnt.find(target) != cnt.end()) {
ans += cnt[target];
}
++cnt[hours[i] % 24];
}
return ans;
}
};
如果hours的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(1)。