[LeetCode] 3184. Count Pairs That Form a Complete Day I
Given an integer array hours representing times in hours, return an integer denoting the number of pairs i, j where i < j and hours[i] + hours[j] forms a complete day.
A complete day is defined as a time duration that is an exact multiple of 24 hours.
For example, 1 day is 24 hours, 2 days is 48 hours, 3 days is 72 hours, and so on.
Example 1:
Input: hours = [12,12,30,24,24]
Output: 2
Explanation:
The pairs of indices that form a complete day are (0, 1) and (3, 4).
Example 2:
Input: hours = [72,48,24,3]
Output: 3
Explanation:
The pairs of indices that form a complete day are (0, 1), (0, 2), and (1, 2).
Constraints:
1 <= hours.length <= 100
1 <= hours[i] <= 109
构成整天的下标对数目 I。
给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < j 且 hours[i] + hours[j] 构成 整天 的下标对 i, j 的数目。整天 定义为时间持续时间是 24 小时的 整数倍 。
例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。
说明
这道题的思路二可以直接用来解决 3185 题,与 3184 题是一模一样的。
思路一 暴力解
暴力解法是枚举所有可能的下标对,然后判断是否构成整天。时间复杂度为 O(n^2)。
复杂度
时间O(n^2)
空间O(1)
代码
Java实现
1 |
|
思路二 - 利用模运算的规则
题目要求我们找的 pair 是 a + b 形成的 hour 是一整天,可以是 24 小时也可以是 48 小时,只要是 24 的倍数即可。同时注意到模运算是有结合律的,即如果 (a + b) % 24 = 0
,那么 a % 24 + b % 24 = 24
。
所以这里我们可以用一个长度为 24 的数组int[] map
把所有数字 % 24 后的值统计出来。设当前遍历到的小时是 hour,那么我们把它 % 24,即 hour % 24
,把它存入 map 中。可以和hour % 24
配对的 hour 是 24 - hour % 24
。唯一的例外是 24 和 24 的倍数,具体参见代码。
复杂度
时间O(n)
空间O(24) - O(1)
代码
Java实现
1 |
|
相关题目
1 |
|