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

go · 浏览次数 : 0

小编点评

归纳总结: 本篇文档主要讲述了如何使用Go语言解决LeetCode上的一道题目:城市中由n个房屋和n条街道连接的情况。题目要求计算对于每个街道数(从1到n),有多少房屋对满足从一个房屋到另一个房屋经过的街道数正好为该街道数。在结果数组中,索引k对应的是满足此条件的房屋对数量。 解题思路: 首先设定输入参数n为3, x为1, y为3。然后调用countOfPairs函数进行计算。 在countOfPairs函数中,先创建了一个结果数组result,长度为n,用于存储最终的结果。接着找到x和y中的较小值和较大值,判断它们之间的差值是否小于等于1。如果满足条件,则进入条件分支进行计算。否则,则按照一般的计算方法计算前缀和结果。 具体实现过程中,使用了一个for循环遍历索引i从1到n,计算每对房屋的数量并存储在result数组中。此外,还使用了一个辅助函数min和max,用于比较两个数的大小,求出它们的最小值和最大值。最后,使用了一个for循环计算前缀和结果,并将结果存储在result数组中。 性能分析: 本算法的时间复杂度以O(n)为主,其中包括for循环和辅助函数的运行时间。空间复杂度方面,除了输入参数之外,程序额外使用了result和diff两个数组。其中,result数组的空间复杂度为O(n),diff数组的空间复杂度为O(n+1),约为O(n)。总的额外空间复杂度为O(n)。 Python完整代码如下: ```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)) ```

正文

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))

在这里插入图片描述

与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:用go语言,给定三个正整数 n、x 和 y, 描述一个城市中由 n 个房屋和 n 条街道连接的情况。 城市中存在一条额外的街道连接房屋 x 和房屋 y。 需要计算对于每个街道数(从 1 到 n), 有多少房屋对满足从一个房屋到另一个房屋经过的街道数正好为该街道数。 在结果数组中

zookeeper:Unexpected exception, exiting abnormally ::java.io.EOFException

转载请注明出处: 服务器中断,重启服务器在重启kafka服务时,遇到如下报错: 2024-06-05 13:52:56,251 [myid:] - ERROR [main:ZooKeeperServerMain@64] - Unexpected exception, exiting abnormal

2024-06-19:用go语言,给定一个起始下标为 0 的整数数组 nums 和一个整数 k, 可以执行一个操作将相邻两个元素按位AND后替换为结果。 要求在最多执行 k 次操作的情况下, 计算数组

2024-06-19:用go语言,给定一个起始下标为 0 的整数数组 nums 和一个整数 k, 可以执行一个操作将相邻两个元素按位AND后替换为结果。 要求在最多执行 k 次操作的情况下, 计算数组中所有元素按位OR后的最小值。 输入:nums = [3,5,3,2,7], k = 2。 输出:3

2024-06-15:用go语言,Alice 和 Bob 在一个环形草地上玩一个回合制游戏。 草地上分布着一些鲜花,其中 Alice 到 Bob 之间顺时针方向有 x 朵鲜花,逆时针方向有 y 朵鲜花

2024-06-15:用go语言,Alice 和 Bob 在一个环形草地上玩一个回合制游戏。 草地上分布着一些鲜花,其中 Alice 到 Bob 之间顺时针方向有 x 朵鲜花,逆时针方向有 y 朵鲜花。 游戏规则如下: 1.游戏从 Alice 开始。 2.每个回合中,当前玩家必须选择顺时针或逆时针,

文件系统(八):Linux JFFS2文件系统工作原理、优势与局限

liwen01 2024.06.23 前言 在嵌入式Linux设备中,经常使用jffs2文件系统来作为参数区的文件系统格式。至于为什么要使用jffs2来作为参数区的文件系统,我猜大部分人都没有做过多的思考。 jffs2在2021年被设计出来,距今已过二十多年,现在在嵌入式设备中它还在被大量使用、说明

文件系统(七):文件系统崩溃一致性、方法、原理与局限

liwen01 2024.06.16 前言 先提几个问题:什么是文件系统崩溃一致性?为什么会出现文件系统崩溃一致性问题?有哪些方法可以解这个问题?它们各自又有哪些局限性? window系统电脑异常后会蓝屏、手机死机卡顿后我们会手动给它重启,大部分设备的系统在遇到不可修复的严重异常后都会尝试通过重启来

文件系统(六):一文看懂linux ext4文件系统工作原理

liwen01 2024.06.09 前言 Linux系统中的ext2、ext3、ext4 文件系统,它们都有很强的向后和向前兼容性,可以在数据不丢失的情况下进行文件系统的升级。目前ext4是一个相对较成熟、稳定且高效的文件系统,适用于绝大部分规模和需求的Linux环境。 ext4它突出的特点有:数

使用 GPU 进行 Lightmap 烘焙 - 简单 demo

作者:i_dovelemon 日期:2024-06-16 主题:Lightmap, PathTracer, Compute Shader 引言 一直以来,我都对离线 bake lightmap 操作很着迷。一方面,这个方案历久弥新,虽然很古老,但是一直在实际项目中都有使用;另一方面,它能够产生非常高

毕业季,终于毕业了!

2023.10-2024.06十年有余,没想到在一家公司可以干这么久,属于超长期服役。原本3年前掀完桌子就该背包走人的,没想到又赖了三年。公司属于危机自救无奈减兵过冬,在国法的基础上还加了一点点毕业礼包,在这里真心感谢老板、感谢CCTV、MTV、BTV、皇恩浩荡。 从6.18接到人事通知到6.21最

.NET周刊【6月第5期 2024-06-30】

国内文章 呼吁改正《上海市卫生健康信息技术应用创新白皮书》 C# 被认定为A 组件 的 错误认知 https://www.cnblogs.com/shanyou/p/18264292 近日,《上海市卫生健康“信息技术应用创新”白皮书》发布,提到医疗信创核心应用适配方法及公立医院信息系统。文章中对C#