100301. 构成整天的下标对数目 II
给你一个整数数组 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
1 <= hours[i] <= 109
相似题目
原站题解
rust 解法, 执行用时: 4 ms, 内存消耗: 6 MB, 提交时间: 2024-10-23 09:20:54
impl Solution { pub fn count_complete_day_pairs(hours: Vec<i32>) -> i64 { const H: usize = 24; let mut ans = 0i64; let mut cnt = vec![0; H]; for t in hours { let t = t as usize % H; // 先查询 cnt,再更新 cnt,因为题目要求 i < j // 如果先更新,再查询,就把 i = j 的情况也考虑进去了 ans += cnt[(H - t) % H] as i64; cnt[t] += 1; } ans } }
javascript 解法, 执行用时: 23 ms, 内存消耗: 76.4 MB, 提交时间: 2024-10-23 09:20:32
/** * @param {number[]} hours * @return {number} */ var countCompleteDayPairs = function(hours) { const H = 24; const cnt = Array(H).fill(0); let ans = 0; for (const t of hours) { // 先查询 cnt,再更新 cnt,因为题目要求 i < j // 如果先更新,再查询,就把 i = j 的情况也考虑进去了 ans += cnt[(H - t % H) % H]; cnt[t % H]++; } return ans; };
php 解法, 执行用时: 30 ms, 内存消耗: 46.1 MB, 提交时间: 2024-10-23 09:20:10
class Solution { /** * @param Integer[] $hours * @return Integer */ function countCompleteDayPairs($hours) { $ans = 0; $cnt = array_fill(0, 24, 0); foreach ( $hours as $t ) { // 先查询 cnt,再更新 cnt,因为题目要求 i<j // 如果先更新,再查询,就把 i=j 的情况也考虑进去了 $ans += $cnt[(24-$t%24)%24]; $cnt[$t%24]++; } return $ans; } }
golang 解法, 执行用时: 121 ms, 内存消耗: 19.2 MB, 提交时间: 2024-06-16 23:14:20
func countCompleteDayPairs(hours []int) (ans int64) { cnt := [24]int{} for _, t := range hours { // 先查询 cnt,再更新 cnt,因为题目要求 i<j // 如果先更新,再查询,就把 i=j 的情况也考虑进去了 ans += int64(cnt[(24-t%24)%24]) cnt[t%24]++ } return }
cpp 解法, 执行用时: 138 ms, 内存消耗: 134.6 MB, 提交时间: 2024-06-16 23:12:30
class Solution { public: long long countCompleteDayPairs(vector<int> &hours) { long long ans = 0; int cnt[24]{}; for (int t : hours) { // 先查询 cnt,再更新 cnt,因为题目要求 i<j // 如果先更新,再查询,就把 i=j 的情况也考虑进去了 ans += cnt[(24 - t % 24) % 24]; cnt[t % 24]++; } return ans; } };
java 解法, 执行用时: 4 ms, 内存消耗: 95 MB, 提交时间: 2024-06-16 23:11:59
class Solution { public long countCompleteDayPairs(int[] hours) { long ans = 0; int[] cnt = new int[24]; for (int t : hours) { // 先查询 cnt,再更新 cnt,因为题目要求 i<j // 如果先更新,再查询,就把 i=j 的情况也考虑进去了 ans += cnt[(24 - t % 24) % 24]; cnt[t % 24]++; } return ans; } }
python3 解法, 执行用时: 169 ms, 内存消耗: 60.6 MB, 提交时间: 2024-06-16 23:11:37
class Solution: def countCompleteDayPairs(self, hours: List[int]) -> int: ans = 0 cnt = [0] * 24 for t in hours: # 先查询 cnt,再更新 cnt,因为题目要求 i<j # 如果先更新,再查询,就把 i=j 的情况也考虑进去了 ans += cnt[(24 - t % 24) % 24] cnt[t % 24] += 1 return ans