参考:https://blog.csdn.net/qq_37651325/article/details/107697293
1.暴力解法
import java.util.Scanner;
public class Main {
public static void main(String[] a){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//用户数量
int[] arr=new int[n];//每个用户的喜好值
for(int i=0;i<n;i++){
arr[i]=sc.nextInt();
}
int row=sc.nextInt();//查询的数量
for(int i=0;i<row;i++){
int l=sc.nextInt()-1;
int r=sc.nextInt()-1;
int k=sc.nextInt();
int res=0;
for(int j=l;j<=r;j++){
if(arr[j]==k){
res++;
}
}
System.out.println(res);
}
}
}
2.哈希表优化
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;
public class Main {
public static int calculate(int l,int r,int k,
HashMap<Integer,List<Integer>>map){
int res=0;
List<Integer> temp=map.get(k);
if(temp!=null){
for(Integer cur:temp){
if(cur>=l && cur<=r){
res++;
}
}
}
return res;
}
public static void main(String[] a){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//用户数量
int[] arr=new int[n];//每个用户的喜好值
for(int i=0;i<n;i++){
arr[i]=sc.nextInt();
}
int row=sc.nextInt();//查询的数量
// map,key:喜好值,value:喜好值对应的用户索引
HashMap<Integer, List<Integer>>map=new HashMap<>();
for(int i=0;i<n;i++){
if(!map.containsKey(arr[i])){
List<Integer> list=new ArrayList<>();
list.add(i);
map.put(arr[i],list);
}else{
List<Integer> list=map.get(arr[i]);
list.add(i);
}
}
for(int i=0;i<row;i++){
int l=sc.nextInt()-1;
int r=sc.nextInt()-1;
int k=sc.nextInt();
int res=calculate(l,r,k,map);
System.out.println(res);
}
}
}