首页 > 试题广场 >

用户喜好

[编程题]用户喜好
  • 热度指数:13485 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为k。因为一些特殊的原因,不会出现一个查询的用户区间完全覆盖另一个查询的用户区间(不存在L1<=L2<=R2<=R1)。

数据范围: , 每组查询满足 ,查询的喜好值满足

输入描述:
输入: 第1行为n代表用户的个数 第2行为n个整数,第i个代表用户标号为i的用户对某类文章的喜好度 第3行为一个正整数q代表查询的组数  第4行到第(3+q)行,每行包含3个整数l,r,k代表一组查询,即标号为l<=i<=r的用户中对这类文章喜好值为k的用户的个数。 数据范围n <= 300000,q<=300000 k是整型


输出描述:
输出:一共q行,每行一个整数代表喜好值为k的用户的个数
示例1

输入

5
1 2 3 3 5
3
1 2 1
2 4 5
3 5 3

输出

1
0
2

说明

样例解释:
有5个用户,喜好值为分别为1、2、3、3、5,
第一组询问对于标号[1,2]的用户喜好值为1的用户的个数是1
第二组询问对于标号[2,4]的用户喜好值为5的用户的个数是0
第三组询问对于标号[3,5]的用户喜好值为3的用户的个数是2 
n = int(input())
like_data = list(map(int, input().split(' ')))
q = int(input())
like_count_data = []
for i in range(q):
    like_count_data.append(list(map(int, input().split(' '))))
if n <= 300000 and q <= 300000:
    for item in like_count_data:
        data = like_data[item[0] - 1:item[1]]
        print(data.count(item[2]))


这个为什么不对呀
编辑于 2019-07-25 12:20:24 回复(0)
# Python版
def output(user1,user2,k,kList):
    selectList = [] for i in range(user1-1,user2):
        selectList.append(kList[i])
    count = 0  for i in selectList: if k == i:
            count +=1  return count
userNum = int(input('请输入用户数量:'))
kList = [] for i in range(1,userNum+1):
    k = int(input('请输入用户{}的喜爱值:'.format(i)))
    kList.append(k)
q = int(input('请输入用户的组数:')) while q > 0:
    user1 = int(input('请输入起始用户标号:'))
    user2 = int(input('请输入终止用户标号:'))
    k = int(input('请输入要判断的k值:'))
    q -= 1  print(output(user1,user2,k,kList))

发表于 2019-03-15 19:05:09 回复(2)