Leetcode 3017. Count the Number of Houses at a Certain Distance II

  • Leetcode 3017. Count the Number of Houses at a Certain Distance II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3017. Count the Number of Houses at a Certain Distance II

1. 解题思路

这一题其实思路上还是比较简单的,显然任何一个图都可以拆分为以下三个部分:

  1. 环的左侧
  2. 环的右侧
A
B
C
D
E

因此,我们总可以将所有的城市关系分为下述三种:

  1. 环内部的两个城市
  2. 环外部的两个城市
  3. 环外部的一个城市与环内的一个城市

因此,我们只需要分类讨论上述三种情况下的各个distance的种数然后相加即可。

首先,对于环内的两个城市,这个是比较简单的,对于任何一个距离,从任何一个城市出发,从左从右都可以到达一个城市,因此,任何一个距离 d ≤ ⌊ n 2 ⌋ d \leq \lfloor \frac{n}{2} \rfloor d2n的距离都对应 2 n 2n 2n的走法,唯一需要注意一下的就是 n n n为奇数的情况,此时对于 ⌊ n 2 ⌋ \lfloor \frac{n}{2} \rfloor 2n的距离下,左右走到的都是同一个城市,因此需要修正为 n n n

然后,对于第二种情况,对于环外的两个城市,显然我们将环视为两个节点即可,此时就是一条单链,任意距离 d d d对应的走法总数就是 n − d n-d nd。不过,我们需要注意一下,因为环上的两个点事实上是不允许走到的,因此我们需要额外刨除一下以这两个点作为起点以及终点时的情况。

最后,对于第三种情况,则稍微复杂一点,显然,我们只需要考虑一侧进入到环的情况即可,此时我们不难按照1中的情况获得从环的入口到达环上任意一点的走法种数,然后,我们对环入口线段上的所有点进行一下累加即可,对应情况极为:

a b c d e a b c d e a b c d e a b c d e ⋯ \begin{aligned} a && b && c && d && e \\ && a && b && c && d && e \\ && && a && b && c && d && e \\ && && && a && b && c && d && e \\ && && && && && && && &\cdots \end{aligned} abacbadcbaedcbedcede

这个我们用一个累积数组进行计算即可。

当然,这里也有一个特殊情况,就是当环的起点和终点是同一个点时,此时走环反而要多走一步,因此我们直接需要过滤掉这种情况。

2. 代码实现

给出python代码实现如下:

class Solution:def countOfPairs(self, n: int, x: int, y: int) -> List[int]:x, y = (x, y) if x <= y else (y, x)if x == y:return [2*(n-1-i) for i in range(n)]inside = y-x+1left, right = x-1, n-ydef cal_outer(a, b):m = a+b+2ans = [2*(m-1-i) for i in range(m)]for i in range(a):ans[i] -= 2ans[i+1] -= 2for i in range(b):ans[i] -= 2ans[i+1] -= 2ans[0] -= 2return ans + [0] * (n-len(ans))def cal_inner(m):if m % 2 == 0:ans = [m*2 for i in range(1, m//2)] + [m]else:ans = [m*2 for i in range(1, (m+1)//2)]return ans + [0] * (n-len(ans))def cal_cross(a, b):ans= [0 for _ in range(n)]if a == 0:return anss = [1] + [2 for _ in range((b-1)//2)]if b % 2 == 0:s = s + [1]m = len(s)s = [0] + list(accumulate(s))for i in range(a+m-1):ans[i] = 2*(s[min(i+1, m)] - s[max(0, i-a+1)])return ansinner = cal_inner(inside)outer = cal_outer(left, right)left_cross = cal_cross(left, inside)right_cross = cal_cross(right, inside)ans = [inner[i]+outer[i]+left_cross[i]+right_cross[i] for i in range(n)]return ans

提交代码评测得到:耗时691ms,占用内存36.1MB。

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

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

相关文章

【数据库原理】(38)数据仓库

数据仓库&#xff08;Data Warehouse, DW&#xff09;是为了满足企业决策分析需求而设计的数据环境&#xff0c;它与传统数据库有明显的不同。 一.数据库仓库概述 定义: 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持企业管理和…

机械设计-哈工大课程学习-螺旋传动

二、摩擦类型 1、静态摩擦&#xff1a;这是身体静止时所经历的摩擦。换句话说&#xff0c;就是身体有运动倾向时的摩擦力。 2、动态摩擦&#xff1a;这是身体在运动时所经历的摩擦。也称为动摩擦。动摩擦有以下两种类型&#xff1a; ①滑动摩擦&#xff1a;一个物体在另一个…

C# Socket通信从入门到精通(17)——单个异步UDP服务器监听一个客户端C#代码实现

前言: 我们在开发UDP通信程序时,除了开发UDP同步客户端程序,有时候我们也需要开发异步UDP服务器程序,所谓的异步最常见的应用就是服务器接收客户端数据以后,程序不会卡在数据接收这里,而是可以继续往下执行,这在实际项目中是经常会遇到的,所以说掌握异步UDP服务器程序…

学会这个工具,小白也可制作门窗电子画册

​随着互联网技术的发展&#xff0c;现在制作电子画册已经变得非常简单。如果你是一个新手&#xff0c;也可以通过学习一些技巧来制作门窗电子画册。 那么&#xff0c;如何制作门窗电子画册呢&#xff1f;其实&#xff0c;这个过程并不复杂。只需要一台电脑和一个基本的操作工具…

K8s(七)四层代理Service

Service概述 Service在Kubernetes中提供了一种抽象的方式来公开应用程序的网络访问&#xff0c;并提供了负载均衡和服务发现等功能&#xff0c;使得应用程序在集群内外都能够可靠地进行访问。 每个Service都会自动关联一个对应的Endpoint。当创建一个Service时&#xff0c;Ku…

Es bulk批量导入数据(1w+以上)

最近在学习es的理论知识以及实际操作&#xff0c;随时更新~ 概要&#xff1a;首先你得有1w条数据的json&#xff0c;然后用java读取json文件导入 一. 创建Json数据 首先我生成1.5w条数据&#xff0c;是为了实践分页查询&#xff0c;用from-size和scroll翻页去实践 生成四个字段…

检索增强(RAG)的方式---重排序re-ranking

提升RAG&#xff1a;选择最佳嵌入Embedding&重排序Reranker模型 检索增强生成(RAG)技术创新进展&#xff1a;自我检索、重排序、前瞻检索、系统2注意力、多模态RAG RAG的re-ranking指的是对初步检索出来的候选段落或者文章&#xff0c;通过重新排序的方式来提升检索质量。…

mac安装部署gitbook教程

mac安装部署gitbook教程 前言一、安装准备二、GitBook安装项目初始化 前言 一些自己实际操作的记录。 一、安装准备 Node.js gitbook基于Node.js&#xff0c;所以需要提前安装。 下载地址&#xff1a;https://nodejs.org/en/&#xff0c;可以下载比较新的版本。(但我的建议是不…

Linux指令补充和权限简单介绍

一.tar指令 形式&#xff1a;tar [-cxtzjvf] 文件与目录 ....
 参数&#xff1a;
 -c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b; -x &#xff1a;解开一个压缩文件的参数指令&#xff01; -t &#xff1a;查看 tarfile 里面的文件&#xff01; -…

练习题 幸运数

题目 问题描述 小蓝认为如果一个数含有偶数个数位&#xff0c;并且前面一半的数位之和等于后面一半的数位之和&#xff0c;则这个数是他的幸运数字。例如 23142314 是一个幸运数字, 因为它有 44 个数位, 并且 23142314 。现在请你帮他计算从 11 至 100000000100000000 之间共…

【WinForm.NET开发】实现使用后台操作的窗体

本文内容 创建使用后台操作的窗体使用设计器创建 BackgroundWorker添加异步事件处理程序添加进度报告和取消支持Checkpoint 如果某项操作需要很长的时间才能完成&#xff0c;并且不希望用户界面 (UI) 停止响应或阻塞&#xff0c;则可以使用 BackgroundWorker 类在另一个线程上…

为什么C++17要引入std::string_view?

目录 1.引言 2.原理分析 2.1.结构 2.2.构造函数 2.3.成员函数 2.4.std::string_view字面量 3.实例 3.1.std::string_view和std::string的运算符操作 3.2.查找函数使用 3.3.std::string_view和临时字符串 4.总结 1.引言 在C/C日常编程中&#xff0c;我们常进行数据的…

JDK8新增的时间类

目录 内容大纲&#xff1a; 1、Zoneld时区 2、Instant时间戳 3、ZoneDateTime带时区的时间 4、DateTimeFormatter用于时间的格式化和解析 5、Calendar类&#xff1a; 6、工具类 内容大纲&#xff1a; 1、Zoneld时区 方法名说明static Set<String>getArailableZoneIds()获…

java集合(4)

1.HashSet集合 1.1HashSet集合概述和特点【应用】 底层数据结构是哈希表 存取无序 不可以存储重复元素 没有索引,不能使用普通for循环遍历 1.2HashSet集合的基本应用【应用】 存储字符串并遍历 public class HashSetDemo {public static void main(String[] args) {//创…

MCU常用外设总线

目录 前言一、时钟与中断二、GPIO三、ADC四、定时器4.1 基本定时器4.2 通用定时器4.2.1 输入捕获4.2.2 输出比较 五、UART六、IIC七、SPI 前言 本文主要讲单片机外设的功能&#xff0c;即这些外设是什么&#xff0c;可以用来干什么&#xff0c;了解了之后我们就可以通过相应的寄…

学校服务器hpc东南大学,下载国家基因组科技中心数据 gsa-human ascp chatpt建议 Linux系统中写代码

使用ascp批量下载数据 You files.csv 帮我写个批量下载的脚本&#xff0c;批量下载时候&#xff0c;把路径中最后的HRR659816批量替换成 Accession列的内容就行了。下面是示例 ascp -v -QT -l 300m -P33001 -k1 -i ~/.aspera/connect/etc/aspera01.openssh_for_gsa -d asper…

前端 解析压缩包,并且读取Shp生成GeoJson在MapBox上渲染

这里需要先安装shapefile&#xff1b;jszip;turf npm install shapefile npm install jszip npm install turf/turf <ElUploadref"upload"v-model:file-list"fileListShp":limit"1"accept".zip":show-file-list"true":au…

算法训练day18Leetcode找树左下角的值112路径总和106从中序和后续遍历构造二叉树

513 找树左下角的值 题目描述 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。示例 1:输入: root [2,1,3] 输出: 1 示例 2:输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7提示:二叉树的节点个数的范围是 […

贝锐蒲公英云AP体验:云端快速部署、远程管理,轻松满足办公环境

公司原本的网络由于采用多个路由器&#xff0c;导致无线信号杂乱&#xff0c;管理不便&#xff0c;且远程办公体验较差&#xff0c;作为IT负责人的我&#xff0c;一直想寻找一个可以实现网络统一管理并有效提升远程工作便捷性的产品。 于是&#xff0c;我决定在公司内部部署贝…

5G_射频测试_基础概念(二)

定义了测试参考点&#xff0c;不同的RRU类型 C类型传统RRU Conducted and radiated requirement reference points 4.3.1 BS type 1-C&#xff08;传统RRU一般测试点就是连接天线的射频接头&#xff09; 4.3.2 BS type 1-H&#xff08;宏站MassiveMIMO 矩阵天线&#xff…