2025-01-17:构成整天的下标对数目Ⅰ 用go语言,给定一个整数数

360影视 2025-01-17 13:34 2

摘要:2025-01-17:构成整天的下标对数目Ⅰ。用go语言,给定一个整数数组 hours,其中每个元素表示以小时为单位的时间,要求返回一个整数,表示满足条件 i < j 且 hours[i] + hours[j] 为 24 的整数倍的下标对 (i, j) 的数量

2025-01-17:构成整天的下标对数目Ⅰ。用go语言,给定一个整数数组 hours,其中每个元素表示以小时为单位的时间,要求返回一个整数,表示满足条件 i

这里,整天被定义为时间持续的时长是 24 小时的整数倍。例如,1天为24小时,2天为48小时,3天为72小时,以此类推。

1

1

输入: hours = [12,12,30,24,24]。

输出: 2。

解释:

构成整天的下标对分别是 (0, 1) 和 (3, 4)。

答案2025-01-17:

chatgpt[1]

题目来自leetcode3184。

力扣上的官方题解用的是暴力法,并不是最优解。

1.首先,创建一个长度为 24 的数组 m,用于记录每个小时数模 24 的次数。

2.将第一个小时数小时数模 24 的出现次数加一,即 m[hours[0]$]++。

3.初始化变量 ans 为 0,用于记录符合条件的下标对数目。

4.从数组的第二个元素开始遍历,对于每个小时数计算其小时数模 24 的值 hi。

5.计算相补数 he,即 he = (24 - hi) % 24,用于检查是否存在和当前小时数相补的小时数构成完整天。

6.如果 m[he] 大于 0,说明存在和当前小时数相补的小时数,将符合条件的组合数累加到 ans 中。

7.最后,更新记录当前小时数模 24 的次数,即 m[hi]++。

8.返回 ans,即可得到符合条件的下标对数量。

总的时间复杂度为 O(n),其中 n 为 hours 数组的长度,因为需要遍历整个数组一次。

总的额外空间复杂度为 O(1),因为所需的额外空间是固定大小的数组大小与常数变量。

package mainimport ("fmt")func countCompleteDayPairs(hours int) int {var m [24]intm[hours[0]$]++var ans intfor i := 1; i 0 {ans += m[he]}m[hi]++}return ans}func main {hours := int{72, 48, 24, 3}result := countCompleteDayPairs(hours)fmt.Println(result)}

在这里插入图片描述

fn count_complete_day_pairs(hours: Vec) -> i32 {let mut m = vec![0; 24];m[(hours[0] % 24) as usize] += 1;let mut ans = 0;for i in 1..hours.len {let hi = (hours[i] % 24) as usize;let he = (24 - hi as i32) % 24;if m[he as usize] > 0 {ans += m[he as usize];}m[hi] += 1;}ans}fn main {let hours = vec![72, 48, 24, 3];let result = count_complete_day_pairs(hours);println!("{}", result);}

在这里插入图片描述

#include int countCompleteDayPairs(int hours, int size) {int m[24] = {0}; // 初始化一个长度为 24 的数组m[hours[0] % 24]++;int ans = 0;for (int i = 1; i 0) {ans += m[he];}m[hi]++;}return ans;}int main {int hours = {72, 48, 24, 3};int size = sizeof(hours) / sizeof(hours[0]); // 计算数组大小int result = countCompleteDayPairs(hours, size);printf("%d\n", result);return 0;}

在这里插入图片描述

#include #include int countCompleteDayPairs(const std::vector& hours) {std::vector m(24, 0); // 初始化一个大小为 24 的向量,初始值为 0m[hours[0] % 24]++;int ans = 0;for (size_t i = 1; i hours = {72, 48, 24, 3};int result = countCompleteDayPairs(hours);std::cout

在这里插入图片描述

# -*-coding:utf-8-*-def count_complete_day_pairs(hours):m = [0] * 24 # 初始化一个大小为 24 的列表m[hours[0] % 24] += 1ans = 0for i in range(1, len(hours)):hi = hours[i] % 24he = (24 - hi) % 24if m[he] > 0:ans += m[he]m[hi] += 1return ansif __name__ == "__main__":hours = [72, 48, 24, 3]result = count_complete_day_pairs(hours)print(result) # 输出结果

在这里插入图片描述

function countCompleteDayPairs(hours) {const m = new Array(24).fill(0); // 初始化一个大小为 24 的数组m[hours[0] % 24]++;let ans = 0;for (let i = 1; i 0) {ans += m[he];}m[hi]++;}return ans;}const hours = [72, 48, 24, 3];const result = countCompleteDayPairs(hours);console.log(result); // 输出结果

在这里插入图片描述

// SPDX-License-Identifier: MITpragma solidity ^0.8.0;contract DayPairCounter {function countCompleteDayPairs(uint memory hours2) public pure returns (uint) {uint[24] memory occurrences;occurrences[hours2[0] % 24]++;uint ans;for (uint i = 1; i 0) {ans += occurrences[he];}occurrences[hi]++;}return ans;}function testCountCompleteDayPairs public pure returns (uint) {uint memory hours2 = new uint(4);hours2[0] = 72;hours2[1] = 48;hours2[2] = 24;hours2[3] = 3;return countCompleteDayPairs(hours2);}}

在这里插入图片描述

来源:根本教育

相关推荐