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

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

  1. C#6.0语言规范(三) 基本概念

    应用程序启动 具有入口点的程序集称为应用程序.运行应用程序时,会创建一个新的应用程序域.应用程序的几个不同实例可以同时存在于同一台机器上,并且每个实例都有自己的应用程序域. 应用程序域通过充当应用程序 ...

  2. Swift5 语言参考(三) 类型

    在Swift中,有两种类型:命名类型和复合类型.一个名为类型是当它的定义可以给出一个特定名称的类型.命名类型包括类,结构,枚举和协议.例如,名为的用户定义类的实例MyClass具有该类型MyClass ...

  3. 深入研究C语言 第三篇

    本篇研究TC2.0下其他几个工具.同时看看TC由源代码到exe程序的过程. 1. 用TCC将下面的程序编为.obj文件 我们知道,TCC在默认的编译连接一个C语言的源程序a.c的时候分为以下两步: ( ...

  4. Swift语言指南(三)--语言基础之整数和浮点数

    原文:Swift语言指南(三)--语言基础之整数和浮点数 整数 整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,3 ...

  5. ASP.NET MVC:多语言的三种技术处理策略

    ASP.NET MVC:多语言的三种技术处理策略 背景 本文介绍了多语言的三种技术处理策略,每种策略对应一种场景,这三种场景是: 多语言资源信息只被.NET使用. 多语言资源信息只被Javascrip ...

  6. 基于C#程序设计语言的三种组合算法

    目录 基于C#程序设计语言的三种组合算法 1. 总体思路 1.1 前言 1.2 算法思路 1.3 算法需要注意的点 2. 三种组合算法 2.1 普通组合算法 2.2 与自身进行组合的组合算法 2.3 ...

  7. UWP 多语言的三个概念

    首先了解一下 RFC4646 和 BCP-47 是什么东西: RFC4646 The name is a combination of an ISO 639 two-letter lowercase ...

  8. TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派

    TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派 来源:DataCastle数据城堡 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学 ...

  9. 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)

    关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...

  10. SystemVerilog语言简介(三)

    15. 强制类型转换 Verilog不能将一个值强制转换成不同的数据类型.SystemVerilog通过使用'操作符提供了数据类型的强制转换功能.这种强制转换可以转换成任意类型,包括用户定义的类型.例 ...

随机推荐

  1. JavaServlet类

    "感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" 介绍Ser ...

  2. nginx请求头相关漏洞修复(http host&X-XSS-Protection)

    nginx请求头相关漏洞修复(http host&X-XSS-Protection) 参考链接:Nginx常见漏洞处理 - 码农教程 (manongjc.com) Web应用漏洞-NGINX各 ...

  3. 力扣597(MySQL)-好友申请Ⅰ:总体通过率(简单)

    题目: 此表没有主键,它可能包含重复项.该表包含发送请求的用户的 ID ,接受请求的用户的 ID 以及请求的日期. 此表没有主键,它可能包含重复项.该表包含发送请求的用户的 ID ,接受请求的用户的 ...

  4. OpenYurt v1.1.0: 新增 DaemonSet 的 OTA 和 Auto 升级策略

    简介: 在 OpenYurt v1.1.0 版本中,我们提供了 Auto 和 OTA 的升级策略.Auto 的升级策略重点解决由于节点 NotReady 而导致 DaemonSet升级阻塞的问题,OT ...

  5. 102万行代码,1270 个问题,Flink 新版发布了什么?

    阿里妹导读: Apache Flink 是公认的新一代开源大数据计算引擎,可以支持流处理.批处理和机器学习等多种计算形态,也是Apache 软件基金会和 GitHub 社区最为活跃的项目之一. 201 ...

  6. 同为博客,不同风格 ——Hexo另类搭建

    ​简介:通过阿里云云开发平台快速由Hexo创建赛博朋克风格的博客. 一  .通过云开发平台快速创建初始化应用 1.创建相关应用模版请参考链接:Hexo博客框架-轻量.一令部署 2.完成创建后就可以在g ...

  7. 淘宝推荐、视频搜索背后的检索技术竟是它!深度揭秘达摩院向量检索引擎Proxima

    简介: 淘宝搜索推荐.视频搜索的背后使用了什么样的检索技术?非结构化数据检索,向量检索,以及多模态检索,它们到底解决了什么问题?今天由阿里巴巴达摩院的科学家从业务问题出发,抽丝剥茧,深度揭秘达摩院内部 ...

  8. 使用 rocketmq-spring-boot-starter 来配置、发送和消费 RocketMQ 消息

    简介: 本文将 rocktmq-spring-boot 的设计实现做一个简单的介绍,读者可以通过本文了解将 RocketMQ Client 端集成为 spring-boot-starter 框架的开发 ...

  9. 使用ssh连接远程仓库的方法(github)

    使用ssh连接远程仓库的方法 但是当我登录虚拟机想提交csapp的代码时,我发现需要验证我的账号密码,感觉每次提交都要输入这个很麻烦.然后就在网上查询了下为何提交代码需要输入账号密码. 使用 HTTP ...

  10. vue下获得经纬度省市区

    1.根目录html文件引入 <!--引入百度 API,"ak=" 后面一串码是密钥,最好自己申请--> <script type="text/javas ...