距离首都距离

2024-03-29 23:08
文章标签 距离 首都

本文主要是介绍距离首都距离,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 路径数组转化为统计数组
      • 距离首都距离
      • 算法思路
      • 相应代码

路径数组转化为统计数组

距离首都距离

给定一个路径数组paths,表示一张图。
paths[i]==j代表城市i连向城市j
  如果 paths[i]==i,则表示i城市是首都;
  一张图里只会有一个首都且图中除首都指向自己之外不会有环。

nums[i]==j代表距离首都为i的城市有j座
要求实现一个void类型的函数,输入一个路径数组paths,直接在原数组上调整,使之变为nums数组。
若paths长度为N,请达到时间复杂度为O(N)额外空间复杂度为O(1)

举例:
paths = [9, 1, 4, 9, 0, 4, 8, 9, 0, 1]
如下图所示。

路径图

根据题意,首都为1,以首都为原点,计算每个城市与之的距离。
  0距离1为2,1距离1为0,2距离1为4,3距离1为2,4距离1为3,5距离1为4,
  6距离1为4,7距离1为2,8距离1为3,9距离1为1。
因此统计距离首都的城市数量的统计数组为:
  nums = [1, 1, 3, 2, 3, 0, 0, 0, 0, 0]

算法思路

第一步是将路径数组转换为距离数组:[9, 1, 4, 9, 0, 4, 8, 9, 0, 1] -> [-2, 0, -4, -2, -3, -4, -4, -2, -3, -1]
第二步是将距离数组转换为统计数组:[-2, 0, -4, -2, -3, -4, -4, -2, -3, -1] -> [1, 1, 3, 2, 3, 0, 0, 0, 0, 0]

注意
生成距离数组的时候,值设置为负数,可以标记状态,更便于转换成统计数组。
路径转成距离数组的过程中,每一个城市只经历跳出去和跳回来两个过程,距离数组转成统计数组的过程也是如此,所以时间复杂度为 O ( N ) O(N) ON
整个过程没有使用额外的数据结构,只使用了有限几个变量,所以额外空间复杂度为 O ( 1 ) O(1) O1

相应代码

# 路径数组转换为距离数组
# 距离以负数表示
def pathsToDistances(paths):for i in range(0, len(paths)):if paths[i] == i:cap = ielif paths[i] >= 0:index = paths[i]paths[i] = -1pre_index = i# 向前跳while paths[index] >= 0 and paths[index] != index:next_index = paths[index]paths[index] = pre_indexpre_index = indexindex = next_indexif paths[index] == index:dis = 0else:dis = paths[index]# 往回跳index = pre_indexwhile paths[index] != -1:pre_index = paths[index]dis = dis - 1paths[index] = disindex = pre_indexdis = dis - 1paths[index] = dispaths[index] = dis# 首都距离为0paths[cap] = 0# 距离数组转换为统计数组
def distancesToStatistic(paths):for i in range(len(paths)):# 负数为未统计值if paths[i] < 0:index = -paths[i]paths[i] = 0  # 可以设置值# index向前统计while paths[index] < 0:next_index = -paths[index]paths[index] = 1index = next_indexpaths[index] += 1paths[0] = 1def pathsToStatistic(paths):pathsToDistances(paths)distancesToStatistic(paths)# 简单测试
if __name__ == '__main__':paths = [9, 1, 4, 9, 0, 4, 8, 9, 0, 1]pathsToStatistic(paths)print(paths)

有任何疑问和建议,欢迎在评论区留言和指正!

感谢您所花费的时间与精力!

这篇关于距离首都距离的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859891

相关文章

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x

模拟退火求n个点到某点距离和最短

/*找出一个点使得这个店到n个点的最长距离最短,即求最小覆盖圆的半径用一个点往各个方向扩展,如果结果更优,则继续以当前步长扩展,否则缩小步长*/#include<stdio.h>#include<math.h>#include<string.h>const double pi = acos(-1.0);struct point {double x,y;}p[1010];int

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

SimD:基于相似度距离的小目标检测标签分配

摘要 https://arxiv.org/pdf/2407.02394 由于物体尺寸有限且信息不足,小物体检测正成为计算机视觉领域最具挑战性的任务之一。标签分配策略是影响物体检测精度的关键因素。尽管已经存在一些针对小物体的有效标签分配策略,但大多数策略都集中在降低对边界框的敏感性以增加正样本数量上,并且需要设置一些固定的超参数。然而,更多的正样本并不一定会带来更好的检测结果,事实上,过多的正样本

Matlab)实现HSV非等间隔量化--相似判断:欧式距离--输出图片-

%************************************************************************** %                                 图像检索——提取颜色特征 %HSV空间颜色直方图(将RGB空间转化为HS

C/C++两点坐标求距离以及C++保留两位小数输出,秒了

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 3. 备注 1. 前言 依旧是带来一个练手的题目,目的就一个,方法千千万,通向终点的方式有很多种,没有谁与谁,我们都是为了成为更好的自己。 2. 正文 2.1 问题 题目描述: 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。 输入格式:

mysql5.6根据经纬度查询距离二

在MySQL 5.6中,您可以使用Haversine公式来根据经纬度查询距离。以下是一个示例SQL查询,它计算出所有点与给定点(经度lon和纬度lat)的距离,并按距离排序: SELECT id, (2 * 6378.137 * ASIN(SQRT(POW( SIN( PI( ) * ( $lng- `long` ) / 360 ), 2 ) + COS( PI( ) * $lat / 180

像素间的关系(邻接、连通、区域、边界、距离定义)

文章目录 像素的相邻像素4邻域D邻域8邻域 邻接、连通、区域和边界邻接类型连通区域边界 距离测度欧氏距离城市街区距离(city-block distance)棋盘距离(chessboard distance) 参考 像素的相邻像素 4邻域 坐标 ( x , y ) (x,y) (x,y)处的像素 p p p有2个水平的相邻像素和2个垂直的相邻像素,它们的坐标是: ( x

【go语言计算两个经纬度距离】根据经纬度计算两点之间距离

一、需求分析: 输入两个经纬度,计算它们之间的距离 lat1,lng1 := 32.060255,118.796877lat2,lng2 := 39.904211,116.407395 二、计算公式 //C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)

【python 走进NLP】文本相似度各种距离计算

计算文本相似度有什么用? 1、反垃圾文本的捞取 “诚聘淘宝兼职”、“诚聘打字员”…这样的小广告满天飞,作为网站或者APP的运营者,不可能手动将所有的广告文本放入屏蔽名单里,挑几个典型广告文本,与它满足一定相似度就进行屏蔽。 2、推荐系统 在微博和各大BBS上,每一篇文章/帖子的下面都有一个推荐阅读,那就是根据一定算法计算出来的相似文章。 3、冗余过滤 我们每天接触过量的信息,信息之间存在大量