2024-06-05:用go语言,给定三个正整数 n、x 和 y, 描述一个城市中由 n 个房屋和 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:
题目来自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。 需要计算对于每个街道数(的更多相关文章
- 《Entity Framework 6 Recipes》中文翻译系列 (16) -----第三章 查询之左连接和在TPH中通过派生类排序
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-10应用左连接 问题 你想使用左外连接来合并两个实体的属性. 解决方案 假设你有 ...
- Swift语言指南(三)--语言基础之整数和浮点数
原文:Swift语言指南(三)--语言基础之整数和浮点数 整数 整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,3 ...
- C#6.0语言规范(三) 基本概念
应用程序启动 具有入口点的程序集称为应用程序.运行应用程序时,会创建一个新的应用程序域.应用程序的几个不同实例可以同时存在于同一台机器上,并且每个实例都有自己的应用程序域. 应用程序域通过充当应用程序 ...
- 深入研究C语言 第三篇
本篇研究TC2.0下其他几个工具.同时看看TC由源代码到exe程序的过程. 1. 用TCC将下面的程序编为.obj文件 我们知道,TCC在默认的编译连接一个C语言的源程序a.c的时候分为以下两步: ( ...
- ASP.NET MVC:多语言的三种技术处理策略
ASP.NET MVC:多语言的三种技术处理策略 背景 本文介绍了多语言的三种技术处理策略,每种策略对应一种场景,这三种场景是: 多语言资源信息只被.NET使用. 多语言资源信息只被Javascrip ...
- 基于C#程序设计语言的三种组合算法
目录 基于C#程序设计语言的三种组合算法 1. 总体思路 1.1 前言 1.2 算法思路 1.3 算法需要注意的点 2. 三种组合算法 2.1 普通组合算法 2.2 与自身进行组合的组合算法 2.3 ...
- C语言——第三次作业(2)
作业要求一 PTA作业的提交列表 第一次作业 第二次作业 一道编程题: 有一个axb的数组,该数组里面顺序存放了从1到a*b的数字.其中a是你大学号的前三位数字,b是你大学号的后四位数字,比如你的学号 ...
- UWP 多语言的三个概念
首先了解一下 RFC4646 和 BCP-47 是什么东西: RFC4646 The name is a combination of an ISO 639 two-letter lowercase ...
- C语言第三周
一. 字符串常量 只要有一对双引号括起来的字符序列就是字符串常量.列如"hello"接"123" 注意:"a"是字符串常量'a'是字符常量. ...
- 第二百五十九节,Tornado框架-模板语言的三种方式
Tornado框架-模板语言的三种方式 模板语言就是可以在html页面,接收逻辑处理的self.render()方法传输的变量,将数据渲染到对应的地方 一.接收值渲染 {{...}}接收self.re ...
随机推荐
- PolarDB-X迎来开源后首个重大版本升级,2.1版本新增5大特色功能
简介:2022 年 5 月25日,阿里云开源 PolarDB-X 升级发布新版本!PolarDB-X 从 2009 年开始服务于阿里巴巴电商核心系统, 2015 年开始对外提供商业化服务,并于 20 ...
- 更便捷:阿里云DCDN离线日志转存全新升级
简介: 1月6日,阿里云CDN年度产品升级发布会中,阿里云CDN产品专家邓建伟宣布DCDN离线日志转存全新升级,并对离线日志转存方案的价值.应用及使用进行了详细解读. 在日常CDN加速服务过程中会产生 ...
- 服务网格 ASM 年终总结:最终用户如何使用服务网格?
简介:本文不打算回顾 Istio 或是阿里云服务网格 ASM 的变化或趋势,我们来聊一聊阿里云 ASM 服务网格,它的最终用户是如何使用服务网格的. 作者:叶剑宏 背景 阿里云服务网格 ASM 于 ...
- ICBU可控文本生成技术详解
简介: 文本生成(Text Generation)是自然语言处理(Natural Language Processing,NLP)领域的一项重要且具有挑战的任务.顾名思义,文本生成任务的目的是生成近 ...
- 拒绝双写:巧用Lindorm数据订阅
简介: 本文介绍了双写场景的一致性问题,详细介绍了三种解决方案,并针对DB->Binlog->Kafka方案给出了Lindorm数据订阅的最佳实践 双写问题介绍 双写问题(Dual Wr ...
- 模仿Spring实现一个类管理容器
简介: 项目的初衷是独立作出一个成熟的有特色的IOC容器,但由于过程参考Spring太多,而且也无法作出太多改进,于是目的变为以此项目作为理解Spring的一个跳板,与网上的一些模仿Spring的框 ...
- dotnet 将控制台 Console.WriteLine 内容输出到文件
很多伙伴喜欢使用 Console.WriteLine 打日志,也许是打起来顺手.打完了之后,又想着,要是能够输出到本机文件那就更好了.既然很多伙伴都有这个想法,那 dotnet 自然就是有方便的方法让 ...
- iOS中atomic修饰符的底层实现
在iOS中,atomic表示一个类的属性getter/setter具有原子性.那么iOS底层是如何保证这种原子性的呢? 我们有一个类A,它有一个属性X具有atomic: @property (atom ...
- Splashtop :符合 HIPAA 标准的远程桌面软件
如果您正在寻找可帮助您保持 HIPAA 遵从性的远程桌面软件,那么 Splashtop 就是您的最佳选择. 如果您的公司属于美国医疗保健行业,则您知道您必须遵守有关敏感和私人患者信息的联邦 HIPAA ...
- 第三方调用saltstack
python api使用 实例及工作原理解析 指定target 函数,命令等等,就可以可以了. [root@mcw01 ~]# python Python 2.7.5 (default, Aug 4 ...