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 ...
随机推荐
- nuxt使用介绍[学习记录]
服务端渲染 传统服务端渲染 单页面应用 SPA nuxt 是什么 Nuxt.js 是一个基于 Vue.js 的通用应用框架. 通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 ...
- iframe跨域,获取iframe中元素
1.需求让iframe嵌入页面,并且没有滚动条,也就是相当于两个页面拼接在一起 跨域解决,通过框架配置代理 proxy: { '/medical': { target: 'https://exampl ...
- 技术干货 | 阿里云数据库PostgreSQL 13大版本揭秘
简介: 阿里云RDS PostgreSQL是一款兼容开源PostgreSQL的全托管云数据库产品,自2015年首次发布以来,根据用户需求不断升级迭代,已支持9.4.10.11.12等多个版本,覆盖了高 ...
- Nacos 开源、自研、商业化三位一体战略解读
简介: Nacos作为整个阿里云原生三位战略中的核心组成部分,我们在2018年以Configserver/VIPServer/Diamond为基础通过Nacos开源输出阿里十年沉淀的注册中心和配置中心 ...
- [FE] G2Plot 更新图表的两种方式
第一种是使用 G2Plot 对象上的 changeData 方法,如果不涉及到全局 title 等这些的更改,可以采用这种方式. 也就是说,只有纯数据方面的变动,使用 changeData 更新图表数 ...
- 读书笔记 为什么要有R5G6B5颜色格式
在 Windows 下,颜色的格式有很多,我好奇为什么要设计出 R5G6B5 这样的格式?通过阅读一些书和官方的文档,似乎了解了为什么,我在本文记录一下 颜色的格式上,常用的就是 16 位和 32 位 ...
- Node.js 万字教程
0. 基础概念 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,使用了一个事件驱动.非阻塞式 I/O 模型,让 JavaScript 运行在服务端的开发平台. ...
- ADOBE FORM的一些相关资料
虽然很多人觉得打印程序的开发很无聊(我也这么想),但在实际工作中,打印算是比较有意义的工作,所以还是值得学习的. 之前翻译过几篇Adobe Form的文章,其中的内容,可以帮助创建一些简单的打印示例, ...
- C++指针与引用(Pointers OR References)
一.Pointers Pointer是指针,可以用来指向任何一个objects,包括一般变量: 1 int i = 3; 2 int * pi = &i; 3 cout << pi ...
- C#.NET体系图文概述—2024最全总结
C# 是一种简单.现代.面向对象和类型安全的编程语言.. .NET 是由 Microsoft 创建的开发平台,平台包含了语言规范.工具.运行,支持开发各种应用,如Web.移动.桌面等..NET框架有多 ...