青训/中等:视频推荐算法

中等:视频推荐算法.md

问题描述

西瓜视频正在开发一个新功能,旨在将访问量达到80百分位数以上的视频展示在首页的推荐列表中。实现一个程序,计算给定数据中的80百分位数。

例如:假设有一个包含从1到100的整数数组,80百分位数的值为80,因为按升序排列后,第80%位置的数字就是80。

99 百分位数:假如有 N 个数据,将数据从小到大排列,99 百分位数是第 N99%位置处的数据(遇到小数时四舍五入获取整数)。一般计算逻辑是先排序,定位到 N99%的位置。返回该位置处的数据。同理,80 百分位数就是第 N*80%位置处的数据。

答案

def solution(data):
    # 将输入字符串转换为整数列表
    numbers = [int(x) for x in data.split(',')]
    
    # 对数组进行排序
    numbers.sort()
    
    # 计算80百分位数的位置
    n = len(numbers)
    position = int(round(n * 0.8)) - 1  # -1是因为数组索引从0开始
    
    # 确保position不会超出数组范围
    position = max(0, min(position, n - 1))
    
    # 返回80百分位数
    return numbers[position]

if __name__ == "__main__":
    #  You can add more test cases here
    print(solution("10,1,9,2,8,3,7,4,6,5") == 8 )
    print(solution("1,0,8,7,3,9,12,6,4,15,17,2,14,5,10,11,19,13,16,18") == 15)
    print(solution("76,100,5,99,16,45,18,3,81,65,102,98,36,4,2,7,22,66,112,97,68,82,37,90,61,73,107,104,79,14,52,83,27,35,93,21,118,120,33,6,19,85,49,44,69,53,67,110,47,91,17,55,80,78,119,15,11,70,103,32,9,40,114,26,25,87,74,1,30,54,38,50,8,34,28,20,24,105,106,31,92,59,116,42,111,57,95,115,96,108,10,89,23,62,29,109,56,58,63,41,77,84,64,75,72,117,101,60,48,94,46,39,43,88,12,113,13,51,86,71") == 96)

答案详解

我来帮你解决这个视频推荐算法的问题。主要思路是:

  1. 将输入字符串转换为数值列表
  2. 对数据进行排序
  3. 计算80百分位数的位置
  4. 返回该位置的数值

工作原理:

  1. 数据预处理:
    • 使用split(‘,’)将输入字符串按逗号分割
    • 使用列表推导式将字符串转换为整数列表
  2. 排序处理:
    • 使用sort()方法对数组进行升序排序
  3. 计算80百分位数:
    • 计算n * 0.8得到80%位置
    • 使用round()进行四舍五入
    • 减1是因为数组索引从0开始
    • 使用max和min确保位置索引在有效范围内
  4. 返回结果:
    • 返回排序后数组中对应位置的数值

这个实现可以正确处理所有给定的测试用例,包括:

  • 10个数的数组(测试用例1)
  • 20个数的数组(测试用例2)
  • 5个数的小数组(测试用例3)
  • 100个数的大数组(测试用例4)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值