首页 > 其他分享 >2024-06-08:用go语言,给定三个正整数 n、x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋。 在这座城市中,房屋通过街道相连。对于每个编号i(1 <= i < n), 存在一条

2024-06-08:用go语言,给定三个正整数 n、x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋。 在这座城市中,房屋通过街道相连。对于每个编号i(1 <= i < n), 存在一条

时间:2024-06-08 20:56:07浏览次数:18  
标签:编号 房屋 数组 ans go diff 街道

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

表示城市中的房屋数量以及编号为x和y的两个特殊房屋。

在这座城市中,房屋通过街道相连。对于每个编号i(1 <= i < n),

存在一条连接第i个房屋与第(i+1)个房屋的街道。

此外,还有一条特殊街道连接编号为x的房屋与编号为y的房屋。

对于每个k(1 <= k <= n),

需要找出所有满足以下条件的房屋对[house1, house2]:从house1到house2需要经过最少k条街道。

请返回一个长度为n且从下标1开始的数组result,

其中result[k]表示满足上述条件的房屋对数量,

即从一个房屋到另一个房屋需要经过最少k条街道。

注意:x和y可以相等。

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

输出:[6,0,0]。

答案2024-06-08:

chatgpt

题目来自leetcode3017。

大体步骤如下:

1.快速检查x和y的大小关系,确保x <= y,若不满足则交换它们的值,以便后续计算更简单。

2.初始化一个长度为n的空整型数组ans,用于存储结果。

3.检查特殊情况:当x和y之间只隔一个房屋时,快速计算出ans数组的值。在这种情况下,循环遍历房屋序号,填充ans数组。

4.对于一般情况,初始化一个长度为n+1的整型数组diff,用于记录每个房屋对应的路径数量的变化。

5.定义一个匿名函数add(l, r),用于更新diff数组中的元素。该函数增加索引l到r之间的元素值。

6.使用循环遍历房屋,根据不同条件来更新diff数组中的值。具体处理逻辑如下:

  • 对于小于等于x的房屋,根据特定计算方式更新diff数组。

  • 对于大于x小于(y+x)/2的房屋,采用不同计算方式更新diff数组。

  • 其他房屋直接更新diff数组。

7.计算出所有房屋对应路径数量的变化,并填充结果数组ans。

8.返回计算结果ans。

总的时间复杂度:这段代码中的最主要操作是循环遍历房屋,即(O(n))。在每次循环中,对于不同条件,进行一些简单的数学计算和更新数组操作。因此,总的时间复杂度可以近似看作(O(n))。

总的空间复杂度:除了输入参数外,主要使用了ans、diff这两个数组来存储结果和中间计算数据,它们的长度均为n。因此,空间复杂度为(O(n))。

Go完整代码如下:

package main

import "fmt"

func countOfPairs(n, x, y int) []int64 {
	if x > y {
		x, y = y, x
	}

	ans := make([]int64, n)
	if x+1 >= y {
		for i := 1; i < n; i++ {
			ans[i-1] = int64(n-i) * 2
		}
		return ans
	}

	diff := make([]int, n+1)
	add := func(l, r int) {
		diff[l]++
		diff[r+1]--
	}

	for i := 1; i < n; i++ {
		if i <= x {
			k := (x + y + 1) / 2
			add(1, k-i)
			add(x-i+2, x-i+y-k)
			add(x-i+1, x-i+1+n-y)
		} else if i < (x+y)/2 {
			k := i + (y-x+1)/2
			add(1, k-i)
			add(i-x+2, i-x+y-k)
			add(i-x+1, i-x+1+n-y)
		} else {
			add(1, n-i)
		}
	}

	sumD := int64(0)
	for i, d := range diff[1:] {
		sumD += int64(d)
		ans[i] = sumD * 2
	}
	return ans
}

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):
    if x > y:
        x, y = y, x

    ans = [0] * n
    if x + 1 >= y:
        for i in range(1, n):
            ans[i - 1] = (n - i) * 2
        return ans

    diff = [0] * (n + 1)

    def add(l, r):
        diff[l] += 1
        diff[r + 1] -= 1

    for i in range(1, n):
        if i <= x:
            k = (x + y + 1) // 2
            add(1, k - i)
            add(x - i + 2, x - i + y - k)
            add(x - i + 1, x - i + 1 + n - y)
        elif i < (x + y) // 2:
            k = i + (y - x + 1) // 2
            add(1, k - i)
            add(i - x + 2, i - x + y - k)
            add(i - x + 1, i - x + 1 + n - y)
        else:
            add(1, n - i)

    sum_d = 0
    for i, d in enumerate(diff[1:], start=1):
        sum_d += d
        ans[i - 1] = sum_d * 2

    return ans

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

在这里插入图片描述

标签:编号,房屋,数组,ans,go,diff,街道
From: https://www.cnblogs.com/moonfdd/p/18238930

相关文章

  • 关于继承djangon内置模型AbstractUser用户认证authenticate一直返回None
    为了想要使用django内置的auth_user表字段,但是有些字段没有,想要定制于是我们可以:首先导入:fromdjango.contrib.auth.modelsimportUser,AbstractUserfromdjango.dbimportmodels然后这么写:classUserInfo(AbstractUser):"""用户信息"""nid=m......
  • Go使用websocket+nats队列实现聊天
    示例用的github.com/olahol/melody其实是在gorilla/websocket的基础上封装了一下packagemainimport( "encoding/json" "fmt" "github.com/nats-io/nats.go" "github.com/olahol/melody" "log" "net/http" "runti......
  • Go fmt.Print() 格式化
    %v打印结构体%+V打印带有字段的结构体%T打印对象类型%t打印布尔值%d打印整型数,十进制输出,如果d前面有数字,表示控制输出宽度,默认使用空白填充,%05d会在不满5位时填充0%b打印整型数,二进制输出%c打印整型数,字符输出(如果有)%o打印整型数,八进制输出,如果x前面带有#表示带......
  • go 闭包捕获问题
    在Go语言中,闭包(closure)是一个函数值,它引用了其外部作用域中的变量。简而言之,闭包能够“捕获”并“记住”其外部作用域中的变量,即使这个变量的生命周期已经结束。闭包的这种特性使得它在许多编程场景中非常有用,但也可能导致一些意外行为,尤其是在捕获变量时。捕获问题的例子一个常......
  • 纯CSS+单个div实现抖音LOGO
    纯CSS+单个div就能绘制抖音LOGO关键点:主要借助了两个伪元素实现了整体结构,借助了drop-shadow生成一层整体阴影drop-shadow只能是单层阴影,所以另一层阴影需要多尝试contrast(150%)brightness(110%)则可以增强图像的对比度和亮度,更贴近抖音LOGO的效果预览结果如下:在线......
  • Go语言入门随笔
    基本数据类型intint8有符号无符号字符串bool数组切片(基于数组)引用类型map结构体(嵌套,继承)接口(空接口很强大)指针(将值类型变成了引用类型)函数可以当做参数deferpanicrecoverchannel线程安全sync锁读写锁waitgroup等等协程执行完成。ADD(1)Done()wa......
  • go 操作mac
    cilium1.15.1生成随机macpackagemainimport( "crypto/rand" "fmt" "net")//MACaddressisannet.HardwareAddrencapsulationtoforceciliumtoonlyuseMAC-48.typeMACnet.HardwareAddr//Stringreturnsthestringrepr......
  • Go结构体对齐
    具体可以参考b站的幼麟实验室,很硬核typePstruct{ abool bint32 cint8 dint64 ebyte}varpPfmt.Printf("%v\n",unsafe.Sizeof(p)//32成员变量对齐方式为:min(8,1)=1,由于是第一个成员,偏移量为0即可,此时内存占位为:amin(8,4)=4,偏移量为4即可,此时内存占......
  • 【启程Golang之旅】让文件操作变得简单
    欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了解这门语言的基础知识和实用技巧。目录初识文件IO的引入读取文件写入文件文件复制......
  • Dragon_Knight_CTF-stack(栈迁移)
    Dragon_Knight_CTF-stack(栈迁移)程序的保护情况如下,可以看到没有开启pie保护Arch:amd64-64-littleRELRO:PartialRELROStack:NocanaryfoundNX:NXenabledPIE:NoPIE(0x3fe000)可以看道main函数也很简洁,只有一个0x10大小的溢出,程序给了libc,版......