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 ...
随机推荐
- HarmonyOS 性能优化
如何合理使用动效来获得更好的性能 组件转场动画使用 transition: 推荐使用转场动画(transition)而不是组件动画(animateTo),因为 transition 只需要在条件改变时 ...
- vue的history模式与哈希模式原理
hash模式 <!-- * @Author: dezhao.zhao@hand-china.com * @Date: 2021-10-26 17:52:25 * @Description: -- ...
- 力扣372(java)-超级次方(中等)
题目: 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入:a = 2, b = [3]输出:8示例 2: 输入:a = 2, ...
- Flink 源码 | 自定义 Format 消费 Maxwell CDC 数据
Flink 1.11 最重要的 Feature -- Hive Streaming 之前已经和大家分享过了,今天就和大家来聊一聊另一个特别重要的功能 -- CDC. CDC概述 何为CDC?Chang ...
- EventBridge消息路由|高效构建消息路由能力
简介:企业数字化转型过程中,天然会遇到消息路由,异地多活,协议适配,消息备份等场景.本篇主要通过 EventBridge 消息路由的应用场景和应用实验介绍,帮助大家了解如何通过 EventBridg ...
- Kubernetes 已经成为云原生时代的安卓,这就够了吗?
简介:本文将介绍如何在 Kubernetes 上构建新的应用管理平台,提供一层抽象以封装底层逻辑,只呈现用户关心的接口,使用户可以只关注自己的业务逻辑,管理应用更快更安全. 作者:司徒放 导语:云原 ...
- [FAQ] Vue 如何控制标签元素的某个属性的显示 ?
这需要借助 v-model 的用法,动态决定元素的展示. <q-btn :disable="2 > 1">按钮</q-btn> 展示结果是:<q ...
- IEC104 从站/服务端模拟器 调试工具推荐
目录 IEC104 从站/服务端模拟器 调试工具推荐 主要功能 软件截图 IEC104 从站/服务端模拟器 调试工具推荐 下载地址:http://www.redisant.cn/iec104serve ...
- 随机化Tricks
参阅: https://zh.cppreference.com/w/cpp/numeric/random https://zh.cppreference.com/w/cpp/header/random ...
- 检索增强生成(RAG)实践:基于LlamaIndex和Qwen1.5搭建智能问答系统
检索增强生成(RAG)实践:基于LlamaIndex和Qwen1.5搭建智能问答系统 什么是 RAG LLM 会产生误导性的 "幻觉",依赖的信息可能过时,处理特定知识时效率不高, ...