头条笔试题2018后端第二批-用户喜好
头条笔试题2018后端第二批
标签(空格分隔): 笔试题
- 描述:为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为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
package 校招.头条.后端第二批.用户喜好;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @Author: Lance
* @Date: 2018/8/20 16:50
*/
public class Main
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int[] hubby = new int[num];
ArrayList<int[]> arrayList = new ArrayList<>();
for (int i = 0; i < num; i++)
{
hubby[i] = scanner.nextInt();
}
//扫描输入查询的组数
int zuNum = scanner.nextInt();
while (zuNum > 0)
{
int[] lrk = new int[3];
for (int i = 0; i < 3; i++)
{
lrk[i] = scanner.nextInt();
}
arrayList.add(lrk);
zuNum--;
}
for (int[] temp : arrayList)
{
function(hubby,temp);
}
}
public static void function(int[] hubby, int[] lrk)
{
//定义当前范围内喜欢的人数
int curNum = 0;
for (int i = lrk[0] - 1; i <= lrk[1] - 1; i++)
{
if (hubby[i] == lrk[2])
{
curNum++;
}
}
System.out.println(curNum);
}
}