博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字节跳动(用户喜好)
阅读量:5812 次
发布时间:2019-06-18

本文共 1608 字,大约阅读时间需要 5 分钟。

题干:

[编程题] 用户喜好

时间限制:3秒

空间限制:262144K

 

为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为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:
51 2 3 3 531 2 12 4 53 5 3
输出例子1:
102
例子说明1:
样例解释:有5个用户,喜好值为分别为1、2、3、3、5,第一组询问对于标号[1,2]的用户喜好值为1的用户的个数是1第二组询问对于标号[2,4]的用户喜好值为5的用户的个数是0第三组询问对于标号[3,5]的用户喜好值为3的用户的个数是2
 

开始自己写的代码: 

 

1 n = int(input()) 2 li = [int(i) for i in input().split()] 3 q = int(input()) 4 lrk = [] 5 for j in range(q): 6     lrk.append([int(k) for k in input().split()]) 7      8 def compute(li, param): 9     a = 010     for p in li:11         if p == param:12             a += 113     return a14     15 for r in lrk:16     li_a = li[r[0]-1: r[1]]17     print(compute(li_a, r[2]))18 19

 

这段代码完全可以实现题目的操作,但是其非常费时费力;所以尽管代码基本正确无误,但是根本符合不了“速度”的要求;

 

参看了别人的例子改后的代码:

 

n = int(input())li = [int(a) for a in input().split()]d = {}for i,v in enumerate(li):    if v not in d:        d[v] = [i + 1]    else:        d[v].append(i+1)q = int(input())for _ in range(q):    l, r, k = map(int, input().split())    if k not in d.keys():        print(0)    else:        a = 0        for j in d[k]:            if j>=l and j<=r:                a += 1        print(a)

 

在进行少量数据的运算中,这两种实现方法时间上看不出来什么差别;但是,当数据量成千上万甚至十万级别的时候,第一种方式显然运算速度上完全落后于第二种;而且是数倍的差距;

在此,程序就不去解释,只要稍微看一会,就能看出两段程序的优劣!

 

转载于:https://www.cnblogs.com/springionic/p/10539633.html

你可能感兴趣的文章
感悟贴2016-05-13
查看>>
百度编辑器ueditor 光标位置的坐标
查看>>
DEV-C++ 调试方法简明图文教程(转)
查看>>
参加婚礼
查看>>
Java重写equals方法和hashCode方法
查看>>
Spark API编程动手实战-07-join操作深入实战
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
MySQL 备份与恢复
查看>>
TEST
查看>>
PAT A1037
查看>>
(六)Oracle学习笔记—— 约束
查看>>
[Oracle]如何在Oracle中设置Event
查看>>
top.location.href和localtion.href有什么不同
查看>>
02-创建hibernate工程
查看>>
Scrum之 Sprint计划会议
查看>>
svn命令在linux下的使用
查看>>
Gradle之module间依赖版本同步
查看>>
java springcloud版b2b2c社交电商spring cloud分布式微服务(十五)Springboot整合RabbitMQ...
查看>>
10g手动创建数据库
查看>>
Windwos Server 2008 R2 DHCP服务
查看>>