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 ...
随机推荐
- 面试官:来说说vue3是怎么处理内置的v-for、v-model等指令?
前言 最近有粉丝找到我,说被面试官给问懵了. 粉丝:面试官上来就问"一个vue文件是如何渲染成浏览器上面的真实DOM?",当时还挺窃喜这题真简单.就简单说了一下先是编译成rende ...
- 三款免费强大的SSH工具食用指南
食用清单 XShell FinalShell Electerm 食用方案 XShell 先说说老牌ssh工具XShell吧,用过很多年,说实话没啥别的毛病挺好用的.不过,还是有些地方有待加强,比如文件 ...
- 数据结构实验代码分享 - 3 (哈夫曼树 / HuffmanTree)
哈夫曼编码/ 译码系统(树应用) [问题描述] 任意给定一个仅由 26 个大写英文字母组成的字符序列,根据哈夫曼编码算法,求得每个字符的哈夫曼编码. 要求: 1)输入一个由 26 个英文字母组成的字符 ...
- nethttp和gin 路由
net/http 路由注册 func test1() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Requ ...
- 阿里云日志服务SLS携手观测云发布可观测性解决方案,共建可观测应用创新
简介: 2022年云栖大会期间,阿里云同观测云共同发布可观测性联合解决方案.观测云通过集成日志服务SLS的产品能力,发布了观测云SAAS专属版. 2022年云栖大会期间,阿里云同观测云共同发布可观测性 ...
- 科普达人丨一图看懂阿里云ECS
简介: 建议收藏 原文链接:https://click.aliyun.com/m/1000363154/ 本文为阿里云原创内容,未经允许不得转载.
- embedding models 是什么
embedding models 是一类机器学习模型,它们的核心功能是将高维.离散的输入数据(如词汇.类别标签.节点或实体)映射到低维.连续的向量空间中. 这些向量(即 embeddings)通常具有 ...
- C# 从控制台创建 WinUI 3 应用
本文将告诉大家如何从控制台而不是 WinUI3 模版项目,从零一步步创建出 WinUI 3 应用 本文不是 WinUI 3 入门博客,本文将从比较基础层的方式创建出 WinUI 3 应用,适合于了解 ...
- 2019-7-3-Roslyn-理解-msbuild-的清理过程
title author date CreateTime categories Roslyn 理解 msbuild 的清理过程 lindexi 2019-07-03 18:21:25 +0800 20 ...
- 006_Orcad创建Hetergeneous分裂元件
006_Orcad创建Hetergeneous分裂元件 以169脚的EMMC为例: 分为两部分,用到的引脚和NC的引脚. 先画一个框,依据引脚功能添加引脚.A部分做好,做B部分.引脚多,可以用pin ...