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

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

时间:2025-01-17 13:27:50浏览次数:3  
标签:24 int 整数 hours hi ans go he

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

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

1 <= hours.length <= 100。

1 <= hours[i] <= 1000000000。

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

输出: 2。

解释:

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

答案2025-01-17:

chatgpt

题目来自leetcode3184。

大体步骤如下:

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

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

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

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),因为所需的额外空间是固定大小的数组大小与常数变量。

Go完整代码如下:

package main

import (
	"fmt"
)

func countCompleteDayPairs(hours []int) int {
	var m [24]int
	m[hours[0]%24]++
	var ans int
	for i := 1; i < len(hours); i++ {
		hi := hours[i] % 24
		he := (24 - hi) % 24
		if m[he] > 0 {

			ans += m[he]
		}
		m[hi]++

	}
	return ans
}

func main() {
	hours := []int{72, 48, 24, 3}
	result := countCompleteDayPairs(hours)
	fmt.Println(result)
}

在这里插入图片描述

Rust完整代码如下:

fn count_complete_day_pairs(hours: Vec<i32>) -> 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);
}

在这里插入图片描述

C完整代码如下:

#include <stdio.h>

int countCompleteDayPairs(int hours[], int size) {
    int m[24] = {0};  // 初始化一个长度为 24 的数组
    m[hours[0] % 24]++;
    int ans = 0;

    for (int i = 1; i < size; i++) {
        int hi = hours[i] % 24;
        int he = (24 - hi) % 24;
        if (m[he] > 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;
}

在这里插入图片描述

C++完整代码如下:

#include <iostream>
#include <vector>

int countCompleteDayPairs(const std::vector<int>& hours) {
    std::vector<int> m(24, 0);  // 初始化一个大小为 24 的向量,初始值为 0
    m[hours[0] % 24]++;
    int ans = 0;

    for (size_t i = 1; i < hours.size(); ++i) {
        int hi = hours[i] % 24;
        int he = (24 - hi + 24) % 24;  // 确保 he 为非负
        ans += m[he];  // 增加与 he 相关的计数
        m[hi]++;  // 更新小时 hi 的计数
    }

    return ans;
}

int main() {
    std::vector<int> hours = {72, 48, 24, 3};
    int result = countCompleteDayPairs(hours);
    std::cout << result << std::endl;  // 输出结果
    return 0;
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-

def count_complete_day_pairs(hours):
    m = [0] * 24  # 初始化一个大小为 24 的列表
    m[hours[0] % 24] += 1
    ans = 0

    for i in range(1, len(hours)):
        hi = hours[i] % 24
        he = (24 - hi) % 24
        if m[he] > 0:
            ans += m[he]
        m[hi] += 1

    return ans

if __name__ == "__main__":
    hours = [72, 48, 24, 3]
    result = count_complete_day_pairs(hours)
    print(result)  # 输出结果

在这里插入图片描述

Javascript完整代码如下:

function countCompleteDayPairs(hours) {
    const m = new Array(24).fill(0);  // 初始化一个大小为 24 的数组
    m[hours[0] % 24]++;
    let ans = 0;

    for (let i = 1; i < hours.length; i++) {
        const hi = hours[i] % 24;
        const he = (24 - hi) % 24;
        if (m[he] > 0) {
            ans += m[he];
        }
        m[hi]++;
    }
    
    return ans;
}

const hours = [72, 48, 24, 3];
const result = countCompleteDayPairs(hours);
console.log(result);  // 输出结果

在这里插入图片描述

Solidity完整代码如下:

// SPDX-License-Identifier: MIT
pragma 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 < hours2.length; i++) {
            uint hi = hours2[i] % 24;
            uint he = (24 - hi) % 24;

            if (occurrences[he] > 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);
    }
}

在这里插入图片描述

标签:24,int,整数,hours,hi,ans,go,he
From: https://blog.csdn.net/weixin_48502062/article/details/145205284

相关文章

  • YOLOv11改进策略【Neck】| NeurIPS 2023 融合GOLD-YOLO颈部结构,强化小目标检测能力
    一、本文介绍本文主要利用GOLD-YOLO中的颈部结构优化YOLOv11的网络模型。GOLD-YOLO颈部结构中的GD机制借鉴了全局信息融合的理念,通过独特的模块设计,在不显著增加延迟的情况下,高效融合不同层级的特征信息。将其应用于YOLOv11的改进过程中,能够使模型更有效地整合多尺度特......
  • 【Django DRF Apps】从零搭建一个上传图片app
    DjangoRESTFramework图片上传app完整指南以下是一个通过DjangoRESTFramework(DRF)实现图片上传功能的完整示例,涵盖从环境配置到功能实现的所有步骤,同时增加了功能点和知识点的解析,便于理解与扩展。功能点图片上传功能:实现通过API接口上传图片并保存到服务器。......
  • MongoDB 常用指令(详细)
    #MongoDB常用指令##基础命令###启动与连接```bash#启动MongoDB服务mongod#连接MongoDB客户端mongo```###数据库操作```bash#查看当前使用的数据库db#列出所有数据库showdbs#切换或创建数据库use<database_name>#删除当前数据库db.dropDatabase()```##集合操作`......
  • Django Admin 实战:实现 ECS 集群批量同步功能
    引言在管理大规模AWSECS(ElasticContainerService)集群时,保持本地数据库与AWS实际状态的同步是一项关键任务。手动更新既耗时又容易出错,因此自动化这个过程变得尤为重要。本文将介绍如何利用DjangoAdmin的自定义动作功能来实现ECS集群的批量同步操作,从而大幅......
  • IPv4地址转换成整数
    IPv4地址转换成整数真题目录:点击去查看E卷100分题型题目描述存在一种虚拟[IPv4地址],由4小节组成,每节的范围为0~255,以#号间隔,虚拟IPv4地址可以转换为一个32位的整数,例如:128#0#255#255,转换为32位整数的结果为2147549183(0x8000FFFF)1#0#0#0,转换为32位整数的结果为......
  • Python+Django的社区爱心捐赠(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django的社区爱心捐赠(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django数据库:mysql5.7数据库......
  • Python+Django的老年群体安全用药管理系统(角色:用户、医生、药师、管理员)(Pycharm Flas
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django的老年群体安全用药管理系统(角色:用户、医生、药师、管理员)(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端......
  • 使用 Golang 编译 Linux 可运行文件
    Golang(或Go)是一种开源编程语言,因其简单、高效、并发编程支持而备受欢迎。本文将详细介绍如何使用Golang编译生成可以在Linux上运行的可执行文件。一、安装Golang1.1下载Golang从Golang官方网站下载适合你操作系统的安装包:Golang下载页面1.2安装Golang在Ubuntu......
  • CICD Day9、Argo CD增强持续交付
    1、ArgoCD简介在JenkinsCI/CD流程中的持续交付阶段,既部署到k8s集群阶段,使用kubectl工具来进行应用程序的部署和更新操作,但这种方式无法实时跟踪应用程序的状态。这将造成用户在CI/CD流程完成后需要额外操作kubernetes集群,以进一步查看应用程序的状态。为了解决这些问题,可以引......
  • drf:django restframework(一)
    1.快速上手安装:pipinstalldjangorestframework配置,在settings.py中添加配置(这个drf是有默认app的,就是rest_framework。),后面的drf相关配置是在REST_FRAMEWORK里面配置。INSTALLED_APPS=[...#注册rest_framework(drf)'rest_framework',]#drf相关配......