为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为k。因为一些特殊的原因,不会出现一个查询的用户区间完全覆盖另一个查询的用户区间(不存在L1<=L2<=R2<=R1)。
AC代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] num = new int[n];
for(int i = 0;i < n;i++) {
num[i] = scanner.nextInt();
}
Map<Integer,ArrayList<Integer>> map = new HashMap<>();
for(int i = 0; i < num.length;i++) {
if(map.containsKey(num[i])) {
ArrayList<Integer> list = map.get(num[i]);
list.add(i + 1);
}else {
ArrayList<Integer> list = new ArrayList<>();
list.add(i + 1);
map.put(num[i], list);
}
}
int number = scanner.nextInt();
while(number > 0) {
int l = scanner.nextInt();
int r = scanner.nextInt();
int k = scanner.nextInt();
int count = 0;
ArrayList<Integer> list1 = map.get(k);
if(list1 != null)
for(int a : list1) {
if(a > r) {
break;
}else if(a <= r && a >= l) {
count++;
}
}
System.out.println(count);
number--;
}
}
}
注:读数据用scanner.nextInt();加上if(list1 != null)。