餐厅客流量|豆包MarsCode AI刷题

50 阅读3分钟

小U在经营一家餐厅,他希望根据每天的客流量数据来优化备货策略。为此,他需要计算从第一天到第 i i天的中位客流量,并将其四舍五入为整数。 给定餐厅营业的总天数 N N,以及每天的客流量数据 R i R i ​ ,你需要输出一个长度为 N N的序列,其中第 i i个值表示从第一天到第 i i天的中位客流量。所有输出结果都要求进行四舍五入。

  1. 初始化结果列表

    • 首先创建一个空列表 result,用于存储从第一天到第 i 天的中位客流量,后续会不断往这个列表中添加计算得到的中位客流量数值。
  2. 遍历每一天计算中位客流量并添加到结果列表

    • 通过一个循环遍历营业的总天数 N(索引 i 从 0 到 N - 1),对于每一天 i,进行以下操作:

      • 先取出从第一天到第 i 天的客流量数据列表 sub_R,通过对原客流量数据列表 R 进行切片操作 R[:i + 1] 得到,并使用 sorted 函数对其进行排序,这样 sub_R 就是一个有序的客流量子列表。

      • 获取子列表 sub_R 的长度 n,通过判断 n 的奇偶性来计算中位数:

        • 如果 n 是奇数(通过 n % 2 == 1 判断),那么中位数就是子列表中间位置的那个元素,直接通过索引 n // 2 取出该元素赋值给 median(这里使用整数除法 // 来获取中间位置的索引)。
        • 如果 n 是偶数,那么中位数就是中间两个元素的平均值,通过将中间两个元素(索引分别为 n // 2 - 1 和 n // 2)相加后除以 2 得到中位数 median
      • 最后使用 round 函数对计算得到的中位数 median 进行四舍五入,并将结果添加到 result 列表中。

  3. 返回最终结果列表

    • 当循环遍历完所有 N 天并计算完相应的中位客流量后,result 列表中存储的就是长度为 N 的、包含每天中位客流量的序列,将其返回即可。

时间复杂度方面,外层循环遍历 N 天的时间复杂度为 (N 为营业总天数),在每次循环中,对客流量子列表进行排序的操作时间复杂度通常为 (i 为当前子列表的长度,最坏情况下为 N,这里使用 Python 内置的排序算法,一般是基于比较的排序算法,时间复杂度符合这个量级),其他操作(如判断奇偶性、计算中位数、四舍五入等)时间复杂度都是常数级别,综合起来整体时间复杂度大致为 ,在处理常规数量的营业天数以及客流量数据时能够正确地计算并返回相应的中位客流量序列。