3185.构成整天的下标对数目

keybot
0
2025-08-20

#medium
给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < jhours[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;
}