理想火车站定位-解题思路 | 豆包MarsCode AI刷题

122 阅读3分钟

知识点详解

1. 曼哈顿距离(Manhattan Distance)

曼哈顿距离是一种特殊的距离度量方式,用于计算在标准坐标系上的两点之间的距离。在本问题中,它被定义为两点横纵坐标差的绝对值之和,即 |x1 - x2| + |y1 - y2|。这种距离度量方式适用于像城市街道这样的网格状布局。

2. 列表和元组

  • 列表(List) :Python 中的列表是一种有序的集合,可以包含任意类型的元素,支持增删改查等操作。
  • 元组(Tuple) :元组与列表类似,但它是不可变的,一旦创建就不能修改。元组通常用于存储不应改变的数据。

3. 循环结构

Python 中的 for 循环用于遍历序列(如列表、元组)中的每个元素。在本问题中,我们需要使用循环来遍历所有市民的位置和所有可能的火车站位置。

4. 条件判断

使用 if 语句来进行条件判断。在本问题中,我们需要判断当前火车站位置的总距离是否小于已知的最小距离,以决定是否更新最小距离和最优位置。

5. 绝对值函数

Python 中的 abs() 函数用于计算一个数的绝对值。在计算曼哈顿距离时,我们需要使用绝对值来确保距离始终为非负数。

解题思路

  1. 初始化:设置一个足够大的初始最小距离和一个初始的最优位置。
  2. 遍历备选位置:对每个备选的火车站位置进行遍历。
  3. 计算总距离:对于每个备选位置,计算它到所有市民的曼哈顿距离总和。
  4. 更新最优位置:如果当前备选位置的总距离小于已知的最小距离,则更新最小距离和最优位置。
  5. 返回结果:遍历结束后,返回最优位置。

代码讲解

python
def solution(n, m, citizens, locations):
    # 初始化最小距离为无穷大,表示尚未找到更小的距离
    min_distance = float('inf')
    # 初始化最优位置为 [-1, -1],表示尚未找到最优位置
    best_location = [-1, -1]
    
    # 遍历所有火车站备选位置
    for loc in locations:
        # 初始化当前位置的总距离为0
        total_distance = 0
        # 遍历所有市民的位置
        for citizen in citizens:
            # 计算当前火车站位置到当前市民的曼哈顿距离,并累加到总距离
            total_distance += abs(citizen[0] - loc[0]) + abs(citizen[1] - loc[1])
        
        # 如果当前总距离小于已知的最小距离,则更新最小距离和最优位置
        if total_distance < min_distance:
            min_distance = total_distance
            best_location = loc
    
    # 返回最优位置
    return best_location

代码分析

  • 函数定义solution 函数接受市民人数 n、备选位置数 m、市民位置列表 citizens 和备选位置列表 locations 作为参数。
  • 循环结构:使用两层 for 循环,外层循环遍历备选位置,内层循环遍历市民位置。
  • 条件判断:使用 if 语句来判断是否需要更新最小距离和最优位置。
  • 返回值:函数返回最优位置的坐标。