给你一个整数数组 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 * 10^5
1 <= hours[i] <= 10^9
提示 1
A pair (i, j)
forms a valid complete day if (hours[i] + hours[j]) % 24 == 0
.
提示 2
Using an array or a map, for each index j
moving from left to right, increase the answer by the count of (24 - hours[j]) % 24
, and then increase the count of hours[j]
.
解法:两数之和
本题和 LeetCode 1010. 总持续时间可被 60 整除的歌曲-CSDN博客 几乎一样。
Java版:
class Solution {
public long countCompleteDayPairs(int[] hours) {
long ans = 0;
long[] count = new long[24];
for (int h : hours) {
h %= 24;
int k = (24 - h) % 24;
ans += count[k];
count[h]++;
}
return ans;
}
}
Python3版:
class Solution:
def countCompleteDayPairs(self, hours: List[int]) -> int:
ans = 0
count = [0] * 24
for h in hours:
h %= 24
k = (24 - h) % 24
ans += count[k]
count[h] += 1
return ans
复杂度分析
- 时间复杂度:O(n),其中 n 为数组 hours 的长度。
- 空间复杂度:O(1),需要长度为 24 的数组。