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

news/2025/1/20 11:54:51/文章来源:https://www.cnblogs.com/moonfdd/p/18238930

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 mainimport "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) / 2add(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)/2add(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 := 3x := 1y := 3fmt.Println(countOfPairs(n, x, y))
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-def count_of_pairs(n, x, y):if x > y:x, y = y, xans = [0] * nif x + 1 >= y:for i in range(1, n):ans[i - 1] = (n - i) * 2return ansdiff = [0] * (n + 1)def add(l, r):diff[l] += 1diff[r + 1] -= 1for i in range(1, n):if i <= x:k = (x + y + 1) // 2add(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) // 2add(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 = 0for i, d in enumerate(diff[1:], start=1):sum_d += dans[i - 1] = sum_d * 2return ansn = 3
x = 1
y = 3
print(count_of_pairs(n, x, y))

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/721969.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

特别好的一个网站。各种JAVA JDK的镜像分发。

WEJDK学习站 (injdk.cn) https://www.injdk.cn/

VMware磁盘扩容 文件系统空间不足,无法执行选择操作

前言全局说明VMware磁盘扩容 文件系统空间不足,无法执行选择操作一、说明二、扩容提示错误,原因 VM磁盘扩容,并不是修改文件中的参数,而是最简单的再复制一份新的,然后把旧的删除。 复制意味着磁盘空间要充足,是现有VM占用空间的一倍空闲空间。假设:VM虚拟磁盘占用50G空…

VLAN技术和VLAN间 路由

VLAN技术和VLAN间 路由 VLAN技术:交换机分割广播域的技术。 VLAN:Virtual LAN 虚拟局域网。 *这里把交换机的物理接口称为端口。 VLAN技术 一、VLAN概述: 1.VLAN本质:逻辑独立的IP子网 通过“路由”设备: 第三层交换机 进行通信 2.优点: 增加网络部署的灵活性(管理员可以…

[方法论]再论如何读书——对过去阅读的总结与对未来的要求

献给曾经读了不少阅读方法论文章与书籍却仍迷茫的陆爻齐,让他今后不再烦恼于此前言 陆爻齐在以前曾花心思读了不少关于“如何阅读”这个主题的书,有时对某条表示“顿悟”,然后做了几次就往在一边,什么笔记法啊,阅读法啊,大多十分的繁杂,连把整个流程走完一边都十分繁琐无…

Vue 3 的 teleport 组件封装为自定义指令

<Teleport> 是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。 https://cn.vuejs.org/guide/built-ins/teleport.html 为了更加简便灵活,可以将 Vue 3 的 <teleport> 组件类似的功能封装为自定义指令。当然,但在某些情…

Android实现列表ListView

首先是创建一个基础的item组件<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="mat…

kettle从入门到精通 第六十六课 ETL之kettle kettle阻塞教程,轻松获取最后一行数据,so easy

场景:ETL沟通交流群内有小伙伴反馈,如何在同步一批数据完成之后记录下同步结果呢?或者是调用后续步骤、存储过程、三方接口等。 解决:使用步骤Blocking step进行阻塞处理即可。 1、下面的demo演示从表t1同步数据至表t2(t1表中有三条数据,t2为空表,两个表表结构相同),然…

第二轮PTA作业

前言:在这学期的Java学习了一段时间,相比于之前,在语法和面向对象的思想上比之前了解更多,在能力培养上也是更上一层楼,做了很多的复杂的题,虽然结果不尽人意,但是进行了不断思考和试错的过程,使我在设计层面上受益匪浅。 PTA第四次作业的最后一题 7-1 答题判题程序-4 …

设备树下的 LED 驱动实验

设备树下的 LED 驱动实验 本章实验重点内容如下: ①、在 imx6ull-alientek-emmc.dts 文件中创建相应的设备节点。 ②、编写驱动程序(在第四十二章实验基础上完成),获取设备树中的相关属性值。 ③、使用获取到的有关属性值来初始化 LED 所使用的 GPIO。 设备树文件添加设备节点…

偶函数在零点的泰勒展开式相关知识点

步骤1: 理解偶函数的定义偶函数是指满足 f(x)=f(−x)f(x) = f(-x)f(x)=f(−x) 的函数。这意味着偶函数关于 yyy 轴对称。步骤2: 理解泰勒展开泰勒展开是一种将函数表示为无穷级数的方法,它在函数在某一点的所有导数都存在的情况下非常有效。对于函数 f(x)f(x)f(x) 在零点的泰勒…

三探堆栈欺骗之Custom Call Stacks

本文首发阿里云先知社区:https://xz.aliyun.com/t/14592 背景知识 在之前的文章中,我们介绍了静态欺骗和动态欺骗堆栈,今天我们来一起学习一下另一种技术,它被它的作者称为Custom Call Stacks,即自定义堆栈调用。 关于堆栈欺骗的背景我们就不再说了,这里我们补充一下回调函…

esphome esp8266刷写遇到的问题

问题描述: 在尝试打开串口时出现以下错误信息: Failed to execute open on SerialPort: Failed to open serial port.起因: 莫名其妙地安装了一个乐鑫的新版 CH340 驱动。解决方案:找到正确的驱动程序,如下图所示:卸载安装的新驱动,并等待系统自动安装正确的驱动。