视频推荐的算法 | 豆包MarsCode AI 刷题

86 阅读3分钟

今天我们将在豆包MarsCode AI刷题平台上,完成《视频推荐的算法》这个算法问题,通过练习提升用户解决此类问题的能力。

《视频推荐的算法》题目如下:

image.png

解题思路

  1. 理解百分位数

    • 百分位数是指在一个数据集中,某个百分比位置的值。例如,80百分位数是指在排序后的数据集中,80%位置的值。
    • 具体来说,如果数据集有N个元素,80百分位数就是第 N * 0.8 位置的元素。
  2. 数据处理

    • 首先,需要将输入的字符串转换为整数列表。
    • 然后,对列表进行排序,以便能够准确地找到80百分位数的位置。
  3. 计算位置

    • 计算80百分位数的位置:position = round(len(nums) * 0.8)
    • 注意:由于列表索引从0开始,所以实际的索引位置是 position - 1
  4. 返回结果

    • 根据计算出的位置,返回该位置的元素值。
def solution(data):
    # 将输入字符串转换为整数列表
    nums = list(map(int, data.split(',')))
    
    # 对列表进行排序
    nums.sort()
    
    # 计算80百分位数的位置
    position = round(len(nums) * 0.8)
    
    # 返回该位置的元素值
    return nums[position - 1]

关键点

  • 排序:确保数据是有序的,这样才能准确找到百分位数的位置。
  • 四舍五入:使用 round 函数来处理位置计算中的小数部分。

为什么使用round函数而不是int函数来计算百分位数的位置?

使用 round 函数而不是 int 函数来计算百分位数的位置是为了确保在位置计算中正确处理小数部分。具体来说,round 函数会将小数部分四舍五入,而 int 函数会直接截断小数部分。

详细解释

  1. 四舍五入 vs 截断

    • round 函数会将小数部分四舍五入到最近的整数。例如,round(4.5) 会返回 5,而 round(4.4) 会返回 4
    • int 函数会将小数部分直接截断,只保留整数部分。例如,int(4.5) 会返回 4int(4.9) 也会返回 4
  2. 百分位数的计算

    • 百分位数的计算涉及到小数部分的处理。例如,如果数据集有10个元素,80百分位数的位置是 10 * 0.8 = 8,这已经是一个整数,不需要四舍五入。
    • 但如果数据集有11个元素,80百分位数的位置是 11 * 0.8 = 8.8,此时使用 round(8.8) 会返回 9,而使用 int(8.8) 会返回 8
  3. 正确性

    • 使用 round 函数可以确保在处理小数部分时,位置计算更加准确。特别是在数据集大小不是10的倍数时,四舍五入可以避免位置计算的偏差。

示例

假设数据集有11个元素:

  • 使用 round 函数:
position = round(11 * 0.8)  # 结果是 9
  • 使用 int 函数:
position = int(11 * 0.8)  # 结果是 8

在这种情况下,使用 round 函数会得到更准确的结果。

总结

使用 round 函数而不是 int 函数来计算百分位数的位置,是为了确保在处理小数部分时,位置计算更加准确,避免因截断小数部分而导致的偏差。