#medium
给你一个整数数组 hours
,表示以 小时 为单位的时间,返回一个整数,表示满足 i < j
且 hours[i] + hours[j]
构成 整天 的下标对 i
, j
的数目。
整天 定义为时间持续时间是 24 小时的 整数倍 。
例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。
提示:
1 <= hours.length <= 5 * 105
1 <= hours[i] <= 10^9
解题思路
由于 hours 数组长度过长,暴力的方法会超时,因此我们采用哈希表的方法来实现。哈希表来统计每个余数出现的次数。考虑到一天有 24 小时,我们可以直接用大小为 25 的数组(包括 0 小时的情况)来模拟哈希表,因为小时数对 24 取余后得到的值范围正好是 0 到 23。
long long countCompleteDayPairs(int* hours, int hoursSize) {
int a[30] = {0};
long long sum = 0;
for (int i = 0; i < hoursSize; i++) {
int x = hours[i] % 24;
if (x == 0)
sum += a[0];
else
sum += a[24 - x];
a[x]++;
}
return sum;
}