首页 > 其他分享 >2024-06-05:用go语言,给定三个正整数 n、x 和 y, 描述一个城市中由 n 个房屋和 n 条街道连接的情况。 城市中存在一条额外的街道连接房屋 x 和房屋 y。 需要计算对于每个街道数(

2024-06-05:用go语言,给定三个正整数 n、x 和 y, 描述一个城市中由 n 个房屋和 n 条街道连接的情况。 城市中存在一条额外的街道连接房屋 x 和房屋 y。 需要计算对于每个街道数(

时间:2024-06-05 16:56:02浏览次数:11  
标签:smaller 复杂度 larger 房屋 数组 街道 连接

2024-06-05:用go语言,给定三个正整数 n、x 和 y,

描述一个城市中由 n 个房屋和 n 条街道连接的情况。

城市中存在一条额外的街道连接房屋 x 和房屋 y。

需要计算对于每个街道数(从 1 到 n),

有多少房屋对满足从一个房屋到另一个房屋经过的街道数正好为该街道数。

在结果数组中,索引 k 对应的值表示满足此条件的房屋对数量。

输入:n = 3, x = 1, y = 3。

输出:[6,0,0]。

答案2024-06-05:

chatgpt

题目来自leetcode3015。

大体步骤如下:

1.程序开始执行,进入 main 函数。

2.在 main 函数中设定了 n = 3, x = 1, y = 3,并调用 countOfPairs(n, x, y) 函数。

3.进入 countOfPairs 函数,创建一个结果数组 result,长度为 n,用于存储最终的结果。

4.根据 x 和 y 的大小关系,找出较小值和较大值。在这种情况下,x = 1,y = 3,因此 smaller = 1,larger = 3。

5.检查 larger 和 smaller 之间的差值是否小于等于 1,发现是,进入条件分支。

6.使用 for 循环遍历索引 i 从 1 到 n,计算每对房屋的数量并存储在结果数组中。

7.对于给定的 n = 3,在这种情况下,结果数组将变为 [4, 2, 0]。

8.返回结果数组,打印输出 [4, 2, 0]。

时间复杂度分析:

  • 计算 diff 数组的过程中有一个 for 循环,时间复杂度为 O(n)。

  • 计算前缀和结果的过程中也有一个 for 循环,时间复杂度为 O(n)。

总的时间复杂度为 O(n)。

空间复杂度分析:

  • 除了输入参数外,程序额外使用了 result 和 diff 两个数组。

  • result 数组的空间复杂度为 O(n)。

  • diff 数组的空间复杂度为 O(n+1),约为 O(n)。

总的额外空间复杂度为 O(n)。

go完整代码如下:

package main

import "fmt"

func countOfPairs(n int, x int, y int) []int {
    result := make([]int, n)
    smaller := min(x, y)
    larger := max(x, y)
    if larger-smaller <= 1 {
        for i := 1; i <= n; i++ {
            result[i-1] = (n-i)*2
        }
        return result
    }
    diff := make([]int, n+1)
    for i := 1; i <= n; i++ {
        if i <= smaller {
            mid := (smaller + larger + 1) / 2
            diff[1]++
            diff[mid-i+1]--
            diff[smaller-i+2]++
            diff[smaller-i+larger-mid+1]--
            diff[smaller-i+1]++
            diff[smaller-i+n-larger+2]--
        } else if i < (smaller+larger)/2 {
            mid := i + (larger-smaller+1)/2
            diff[1]++
            diff[mid-i+1]--
            diff[i-smaller+2]++
            diff[i-smaller+larger-mid+1]--
            diff[i-smaller+1]++
            diff[i-smaller+n-larger+2]--
        } else {
            diff[1]++
            diff[n-i+1]--
        }
    }
    prefixSum := 0
    for i := 1; i <= n; i++ {
        prefixSum += diff[i]
        result[i-1] = prefixSum * 2
    }
    return result
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

func main() {
    n := 3
    x := 1
    y := 3
    fmt.Println(countOfPairs(n, x, y))
}

在这里插入图片描述

Python完整代码如下:

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

def count_of_pairs(n, x, y):
    def min(a, b):
        return a if a < b else b

    def max(a, b):
        return a if a > b else b

    result = [0] * n
    smaller = min(x, y)
    larger = max(x, y)

    if larger - smaller <= 1:
        for i in range(1, n+1):
            result[i-1] = (n - i) * 2
        return result

    diff = [0] * (n+1)
    for i in range(1, n+1):
        if i <= smaller:
            mid = (smaller + larger + 1) // 2
            diff[1] += 1
            diff[mid-i+1] -= 1
            diff[smaller-i+2] += 1
            diff[smaller-i+larger-mid+1] -= 1
            diff[smaller-i+1] += 1
            diff[smaller-i+n-larger+2] -= 1
        elif i < (smaller+larger)//2:
            mid = i + (larger-smaller+1)//2
            diff[1] += 1
            diff[mid-i+1] -= 1
            diff[i-smaller+2] += 1
            diff[i-smaller+larger-mid+1] -= 1
            diff[i-smaller+1] += 1
            diff[i-smaller+n-larger+2] -= 1
        else:
            diff[1] += 1
            diff[n-i+1] -= 1

    prefix_sum = 0
    for i in range(1, n+1):
        prefix_sum += diff[i]
        result[i-1] = prefix_sum * 2

    return result

n = 3
x = 1
y = 3
print(count_of_pairs(n, x, y))

在这里插入图片描述

标签:smaller,复杂度,larger,房屋,数组,街道,连接
From: https://www.cnblogs.com/moonfdd/p/18233350

相关文章

  • Microsoft Remote Desktop for Mac(微软远程连接软件)v10.9.7直装版
    MicrosoftRemoteDesktop是微软开发的远程连接工具,支持Windows、macOS、iOS和Android,允许用户通过互联网远程访问其他计算机的桌面和应用程序,实现跨设备文件共享。同时,它提供网络层身份验证、数据加密和多重身份验证等安全功能,确保用户隐私和数据安全。MicrosoftRemoteDesk......
  • beego-yaml-viper 配置数据库连接
    定义config.yaml文件 mysql:driver:mysqluser:rootpassword:roothost:127.0.0.1port:8889database:2204aredis:addr:"127.0.0.1:6379"password:""db:0在main.go文件中packagemainimport( "github.com/b......
  • 使用Python连接到MySQL数据库并执行查询
    在当今数字化时代,数据是企业和组织中至关重要的资产之一。数据库是存储和管理数据的核心工具之一,而MySQL则是其中一种流行的关系型数据库管理系统。如何使用Python编程语言连接到MySQL数据库,并执行查询以检索所需的数据。首先,需要安装pymysql库:pipinstallpymysql下......
  • 【MySQL】表左连接操作,对右表添加过滤数据的条件时,容易忽略的坑(左关联统计右表数据不
     疑问:sql中,左关联,右边表中无对应的数据,那能对右边的列进行筛选吗 ?带着疑问,我们看一下下面的文章MySQL】表左连接,对右表过滤数据时的坑左关联统计右边数据sqlSELECTma.id,ma.model_id,ma.event_rules_id,ma.model_applicati......
  • 配置Mysql允许远程连接
    目录1.开通其他主机使用root登录的权限2.在安装mysql的本机上添加防火墙允许规则,允许33063.补充1.开通其他主机使用root登录的权限在搜索里搜索msyql进入命令行,输入密码;usermysql showtables;显示所有数据库,我们可以看到有一个名为user的表。selectHost,Use......
  • (nice!!!)LeetCode 3067. 在带权树网络中统计可连接服务器对数目(深度优先搜索dfs、树)
    3067.在带权树网络中统计可连接服务器对数目思路:节点数最多1000,那么我们0(n^2)的时间复杂度就ok了。我们可以用一层for循环遍历每一个点i,然后第二层for循环遍历每一条可能的边j,通过用dfs来找到符合“到根节点i的距离可以被signalSpeed整除”的点。不同子节点之间两两组......
  • 连接 Dynamics 365 Customer Engagement (on-premises)
    AuthType=AD创建项目模板是.NETframework4.6.2的控制台程序添加nuget包Microsoft.CrmSdk.CoreAssemblies,Microsoft.CrmSdk.XrmTooling.CoreAssemblyProgram类添加以下代码usingSystem;usingSystem.Configuration;usingMicrosoft.Crm.Sdk.Messages;usingMic......
  • 《计算机网络微课堂》实验24 TCP的运输连接管理
    下面我们来进行一个仿真实验,本仿真实验的目的在于验证TCP使用三报文握手来建立连接,使用四报文挥手来释放连接。我们首先来构建一个非常简单的网络拓扑,只需要一台普通的主机和一台普通的服务器,然后将它们直连即可,选择这里的终端设备,然后拖动一台普通的主机到逻辑工作空间,再拖动......
  • 学习笔记8:全连接网络实现MNIST分类(torch内置数据集)
    转自:https://www.cnblogs.com/miraclepbc/p/14344935.html相关包导入importtorchimportpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltfromtorchimportnnimporttorch.nn.functionalasFfromtorch.utils.dataimportTensorDatasetfromtorch.ut......
  • 虚拟机CentOS8无法连接外网以及Xshell无法连接虚拟机
    自己调试时出现的问题,记录一下目录1.Linux虚拟机连接不上网络1.1问题内容 1.2解决方法1.2.1VMWare配置1.2.2虚拟机设置1.2.3虚拟机系统文件配置2.Xshell连接不上虚拟机2.1问题内容2.2解决方法2.2.1防火墙设置2.2.2网络连接设置1.Linux虚拟机连接不上......